Java 8 Collectors.toMap 以 ArrayList 作为值

Sha*_*wal 1 lambda java-8 java-stream

我想使用 java 8 将给定的二维数组转换为映射。输入 - { { 1, 0 }, { 2, 0 }, { 3, 1 }, { 3, 2 } } 输出的形式应为 Map<Integer,列表>映射=新的HashMap<>(); 输出 - {1=[0], 2=[0], 3=[1, 2]}

下面是我的解决方案

for (int[] prereq : prerequisites) {
            map.computeIfAbsent(prereq[0], k -> new ArrayList<>()).add(prereq[1]);
        }
Run Code Online (Sandbox Code Playgroud)

任何更好的方法,如果 for 循环可以用流代替。

Ekl*_*vya 7

通过 key 使用来收集到包含多个值的 Map 中Collectors.groupingBy

int[][] prerequisites = {{1, 0}, {2, 0}, {3, 1}, {3, 2}};
Map<Integer, List<Integer>> res = Arrays.stream(prerequisites).collect(
        Collectors.groupingBy(x -> x[0], Collectors.mapping(x -> x[1], Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)

输出:

{1=[0], 2=[0], 3=[1, 2]}
Run Code Online (Sandbox Code Playgroud)