Search code examples
javacollectionsguavamultimap

Iterating over Guava Mutlimaps


Is there a way to get a Key-Value pair of each element in a MultiMap in each iteration, without first adding them to a list?

I'd like to implement something like this:

(I know this will not work)

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)
    }
 }
}

I'd like some output similar to:

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

Solution

  • This seems to do what you want:

    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());
        }
    
    }
    

    prints

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