package com.levelup.java.guava;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
/**
* This java example will demonstrate multimap example.
*
* If you haven't already you will face working with Map<K, List<V>>, basically the need
* to have 1 key to many elements. Guava's Multimap to the rescue! It does just that by
* making it easy to handle mapping keys to multiple values. Before picking the default
* ArrayListMulimap, be sure to check out ArrayListMultimap, HashMultimap, LinkedListMultimap,
* LinkedHashMultimap, TreeMultimap, ImmutableListMultimap and associated behaviors
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/guava-multimap-example/'>MultiMap Example</a>
*
*/
public class MultiMapExample {
private static final Logger logger = Logger.getLogger(MultiMapExample.class);
@Test
public void multipleMapExample_with_guava () {
Multimap<String, String> outdoorElements = ArrayListMultimap.create();
outdoorElements.put("fish", "walleye");
outdoorElements.put("fish", "muskellunge");
outdoorElements.put("fish", "bass");
outdoorElements.put("insect", "ants");
outdoorElements.put("insect", "water boatman");
outdoorElements.put("insect", "Lord Howe Island stick insect");
outdoorElements.put("tree", "oak");
outdoorElements.put("tree", "birch");
Collection<String> fishies = outdoorElements.get("fish");
logger.info(fishies);
assertTrue(fishies.size() == 3);
}
@Test
public void multiMap_example_straight_up_java () {
Map<String, List<String>> outdoorElements = new HashMap<String, List<String>>();
putObjects (outdoorElements, "fish", "walleye");
putObjects (outdoorElements, "fish", "muskellunge");
putObjects (outdoorElements, "fish", "bass");
putObjects (outdoorElements, "insect", "ants");
putObjects (outdoorElements, "insect", "water boatman");
putObjects (outdoorElements, "insect", "Lord Howe Island stick insect");
putObjects (outdoorElements, "tree", "oak");
putObjects (outdoorElements, "tree", "birch");
Collection<String> fishies = outdoorElements.get("fish");
logger.info(fishies);
assertTrue(fishies.size() == 3);
}
private void putObjects (Map<String, List<String>> outdoorElements, String key, String value) {
List<String> myClassList = outdoorElements.get(key);
if(myClassList == null) {
myClassList = new ArrayList<String>();
outdoorElements.put(key, myClassList);
}
myClassList.add(value);
}
}