暂时使用到了这两种类型的转换:
第一种HashMultimap:(没有重复的value)
转换方式: (Map<String, List< String >>) (Map<?, ?>) map.asMap();
public Map<String,List<String>> getHashMap(){
Multimap<String, String> map = HashMultimap.create();
map.put("s", "1");
map.put("s", "1");
map.put("s", "2");
map.put("s", "3");
map.put("x", "3");
map.put("e", "3");
map.put("t", "4");
map.put("i", "5");
return (Map<String, List<String>>) (Map<?, ?>) map.asMap();
}
结果:
getHashMap() = {s=[1, 2, 3], t=[4], e=[3], x=[3], i=[5]}
第二种ArrayListMultimap:(有重复的value)
转换方式:Multimaps.asMap(map);
public Map<String,List<String>> getListMap(){
ListMultimap<String, String> map = ArrayListMultimap.create();
map.put("s", "1");
map.put("s", "1");
map.put("s", "2");
map.put("s", "3");
map.put("x", "3");
map.put("e", "3");
map.put("t", "4");
map.put("i", "5");
return Multimaps.asMap(map);
}
结果:
getListMap() = {s=[1, 1, 2, 3], t=[4], e=[3], x=[3], i=[5]}
另附Map 的computeIfAbsent 方法:
public Map<String,List<Integer>> getMap(){
Map<Integer, String> map = new HashMap<>();
map.put(1,"yi");
map.put(2,"yi");
map.put(3,"yi");
map.put(4,"er");
map.put(5,"san");
map.put(6,"si");
map.put(7,"wu");
Map<String, List<Integer>> listMap = new HashMap<>();
map.forEach((key,value)->{
List<Integer> list = listMap.computeIfAbsent(value,v->new ArrayList<>());
list.add(key);
});
return listMap;
}
结果:
getMap() = {yi=[1, 2, 3], san=[5], si=[6], er=[4], wu=[7]}