您可以使用
MultiMap轻松获取所有这些重复的值。
Map<Integer, String> map = new HashMap<Integer, String>();map.put(1, "x");map.put(2, "y");map.put(2, "z");map.put(3, "x");map.put(4, "y");map.put(5, "z");map.put(6, "x");map.put(7, "y");System.out.println("Original map: " + map);Multimap<String, Integer> multiMap = HashMultimap.create();for (Entry<Integer, String> entry : map.entrySet()) { multiMap.put(entry.getValue(), entry.getKey());}System.out.println();for (Entry<String, Collection<Integer>> entry : multiMap.asMap().entrySet()) { System.out.println("Original value: " + entry.getKey() + " was mapped to keys: " + entry.getValue());}打印输出:
Original map: {1=x, 2=z, 3=x, 4=y, 5=z, 6=x, 7=y}Original value: z was mapped to keys: [2, 5]Original value: y was mapped to keys: [4, 7]Original value: x was mapped to keys: [1, 3, 6]每@ noahz 的建议,
forMap并
invertFrom需要更少的线,但可以说是更加复杂的阅读:
HashMultimap<String, Integer> multiMap = Multimaps.invertFrom(Multimaps.forMap(map), HashMultimap.<String, Integer> create());
代替:
Multimap<String, Integer> multiMap = HashMultimap.create();for (Entry<Integer, String> entry : map.entrySet()) { multiMap.put(entry.getValue(), entry.getKey());}


