Редактируемый многостраничный индекс

1

Мне трудно найти конструктора для создания Multimap. Мой код:

Multimap<String, DbEntity> multimapByKey = Multimaps.index(goodHosts, instanceGetKeyfunction);

...

multimapByKey.removeAll(someKey); 
// throws 
// java.lang.UnsupportedOperationException
//     at com.google.common.collect.ImmutableListMultimap.removeAll(Unknown Source)
//     at com.google.common.collect.ImmutableListMultimap.removeAll(Unknown Source)

Поскольку индекс возвращает ImmutableListMultimap я действительно не могу его изменить. Тем не менее, я не вижу других вариантов, чтобы делать group by keyFunction for Multimaps в официальной документации.

Теги:
guava
multimap

1 ответ

3
Лучший ответ

Вы можете создать метод, который возвращает изменчивый Multimap, например индексную функцию, например:

public static <K, V> Multimap<K, V> indexMutable(Iterable<V> values,
        Function<? super V, K> function) {

    // check null value, function
    Multimap<K, V> map = ArrayListMultimap.create();

    for (V v : values) {
        // check null V
        map.put(function.apply(v), v);
    }

    return map;
}

И используйте вот так:

@Test
public void testMutableMap() throws Exception {

    List<String> badGuys = Arrays.asList("Inky", "Blinky", "Pinky",
            "Pinky", "Clyde");
    Function<String, Integer> stringLengthFunction = new Function<String, Integer>() {

        public Integer apply(String input) {
            return input.length();
        }
    };

    Multimap<Integer, String> multipmap = indexMutable(badGuys,
            stringLengthFunction);

    System.out.println(multipmap);
    multipmap.clear();
    System.out.println("It mutable!");

    for (String guy : badGuys) {
        multipmap.get(stringLengthFunction.apply(guy)).add(guy);
    }

    System.out.println(multipmap);
}

Он выводит:

{4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}
It mutable!
{4=[Inky], 5=[Pinky, Pinky, Clyde], 6=[Blinky]}

Этот пример является тем же самым для Multimaps#index Javadoc of Multimaps#index.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню