Java 8 流:转换列表<List<Integer>>

Java 8 Stream : convert a List<List<Integer>>

我有一个这样的 List<List<Integer>> :

[
 [3, 12, 1, 14, 10],
 [3, 12, 1, 15, 10],
 [3, 13, 1, 12, 10],
 [3, 13, 1, 15, 10]
]

我想要这样的东西:(第一个元素只是 3 因为在前面的列表中 3 总是排在第一位。第二个元素是 [12,13] 因为在前面的列表中 12 和 13 在第二个索引等...)

[[3, [12,13], [1], [12,14,15], [10]]

A Map<Integer, List<Integer>> 也是一个有价值的选择

Java 流是否可以做到这一点?

这是你的想法吗?这假定所有内部列表的大小相同。

List<List<Integer>> lists = List.of(
List.of(3, 12, 1, 14, 10),
List.of(3, 12, 1, 15, 10),
List.of(3, 13, 1, 12, 10),
List.of(3, 13, 1, 15, 10));
  • 流式传输内部列表的索引
  • 对于流中的每个列表,将值映射到索引处。不要使用不同的值来重复值。
  • 收集列表中的那些
  • 并将列表收集到列表中。
List<List<Integer>> result = IntStream.range(0,5)
        .mapToObj(i->lists.stream()
                .map(lst->lst.get(i))
                .distinct().toList())
        .toList();
System.out.println(result);

版画

[[3], [12, 13], [1], [14, 15, 12], [10]]

请注意,第四个列表未排序,而是按照遇到值的顺序排序。如果需要,可以修复。