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]]
请注意,第四个列表未排序,而是按照遇到值的顺序排序。如果需要,可以修复。
我有一个这样的 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]]
请注意,第四个列表未排序,而是按照遇到值的顺序排序。如果需要,可以修复。