public void put(final T object,
                    final int index) {
        doForAll(index,
                 new Callback<T>() {
                     @Override
                     public void callback(final T t) {
                         t.setIndex(t.getIndex() + 1);
                     }
                 });

        object.setIndex(index);

        super.put(object);
    }
@Test
    void testAddToMiddle() throws Exception {

        final Person smurf = new Person("Smurf", 55);
        map.put(smurf, 1);

        assertThat(map.get(IndexKey.INDEX_ID).size()).isEqualTo(4);
        assertThat(map.get(IndexKey.INDEX_ID).get(new Value(0))).containsExactly(toni);
        assertThat(map.get(IndexKey.INDEX_ID).get(new Value(1))).containsExactly(smurf);
        assertThat(map.get(IndexKey.INDEX_ID).get(new Value(2))).containsExactly(eder);
        assertThat(map.get(IndexKey.INDEX_ID).get(new Value(3))).containsExactly(michael);
    }