2015-02-27 4 views
1

Есть ли способ получить пару Key-Value каждого элемента в MultiMap на каждой итерации без предварительного добавления их в список?Итерация над Guava Mutlimaps

Я хотел бы реализовать что-то вроде этого:

(я знаю, что это не будет работать)

public class MutliMapTest { 
    public static void main(String... args) { 
    Multimap<String, String> myMultimap = ArrayListMultimap.create(); 

    // Adding some key/value 
    myMultimap.put("Fruits", "Bannana"); 
    myMultimap.put("Fruits", "Apple"); 
    myMultimap.put("Fruits", "Pear"); 
    myMultimap.put("Vegetables", "Carrot"); 

    Iterator it = myMultimap.keySet().iterator(); 

    while(it.hasNext()) { 
     String type = it.next().toString(); 
     String name = myMultimap.gettype); // This will get me a List, but I want a single element 

     System.out.println("Iteration : " + type + " : " + name) 
    } 
} 
} 

я хотел бы некоторый результат, похожий на:

Iteration : Fruits : Bannana 
Iteration : Fruits : Apple 
Iteration : Fruits : Pear 
Iteration : Vegetables : Carrot 
+0

которые Multimap implementati о чем вы говорите? –

+0

Guava Multimaps –

ответ

3

Это, кажется, что вы хотите :

public void test() { 
    System.out.println("Hello"); 
    Multimap<String, String> myMultimap = ArrayListMultimap.create(); 
    // Adding some key/value 
    myMultimap.put("Fruits", "Bannana"); 
    myMultimap.put("Fruits", "Apple"); 
    myMultimap.put("Fruits", "Pear"); 
    myMultimap.put("Vegetables", "Carrot"); 

    for (Map.Entry<String, String> e : myMultimap.entries()) { 
     System.out.println("K : " + e.getKey() + " V : " + e.getValue()); 
    } 

} 

печатает

K : Vegetables V : Carrot 
K : Fruits V : Bannana 
K : Fruits V : Apple 
K : Fruits V : Pear 
+0

Спасибо OldCurmudgeon. Отлично :) –

2

I думаю, entries метод делает то, что вы хотите

Предполагая, что вы говорите abo ет вариацию Google Guava из Multimap

1

Multimap является Map из ключа -> коллекции, и для такого использования класса вложенного Еогеаспа перебирает соответствующие сборники:

Multimap<String, String> myMultimap; 

for (Map.Entry<String, List<String>> entry : myMultimap.entrySet()) { 
    for (String value ; entry.getValue()) { 
     System.out.println(entry.getKey() + ":" + value); 
    } 
} 
+1

Просто хочу указать: «Карта» ключа -> - это всего лишь один способ мышления о 'Multimap'. По идее, мультимап карту, в которой могут быть несколько отображений для одного и того же ключа. API «Мульмап» Guava поддерживает оба способа просмотра. – ColinD

+0

@col совершенно правильно. Я изменил ответ на «сбор» вместо «списка». Код по-прежнему применяется как есть. – Bohemian

+2

Я не подчеркивал там список и коллекцию, больше ключ -> способ сбора многомерных изображений («a -> [1, 2], b -> [3]' ») по сравнению с ключ -> значение с несколькими значениями на ключ, разрешенный способ просмотра («a -> 1, a -> 2, b -> 3'»), как [docs] (http: //docs.guava- libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html) для упоминания 'Multimap'. – ColinD

Смежные вопросы