Java反转地图

And*_*son 2 java arraylist hashmap invert

我需要反转原始地图。这类型是<Integer, String>一样{1 = A, 2 = A, 3 = B....}。我想创建一个新的地图,是StringArrayList,因为如果1 = A2 = A比我想有这样的事情:A = [1? 2]

那我该怎么办呢?

Dar*_*hta 5

您可以使用Java 8的streamAPI 轻松完成此操作,下面是一个示例:

public static void main(String[] args) throws FileNotFoundException {

    Map<Integer, String> map = new HashMap<>();
    map.put(1, "A");
    map.put(2, "A");
    map.put(3, "B");

    Map<String, List<Integer>> invertedMap = map.entrySet()
    .stream()
    .collect(Collectors.groupingBy(Entry::getValue, 
            Collectors.mapping(Entry::getKey, Collectors.toList())));

    System.out.println(invertedMap);

}
Run Code Online (Sandbox Code Playgroud)

  • 这里的普遍共识是,如果Java已经提供了某些东西的库/ API,我宁愿使用它而不是编写自己的样板代码(无论如何,它不会像Java的本机API那样高效)。 (3认同)