出于改进目的,我试图使用专门的流来转置列表列表。
我的意思是,我有一个双打列表列表,其中包含例如
1 2 3 4
5 6 7 8
我想获得一份包含
的双打一览表1 5
2 6
3 7
4 8
以下Stack Overflow问题中提供了迭代方法:How to transpose List<List>?
到目前为止我只想到了丑陋的解决方案,比如用一个自定义对象替换Double,该对象保存列表中的值和索引,使用flatMap展平,使用groupBy再次使用我保存的索引构建它然后去回到双打。
如果您知道任何干净的方式,请告诉我。感谢。
答案 0 :(得分:3)
我喜欢你的问题!只要List
是正方形(每List
包含相同数量的元素),这是实现它的简单方法:
List<List<Integer>> list = List.of(List.of(1, 2, 3, 4), List.of(5, 6, 7, 8));
IntStream.range(0, list.get(0).size())
.mapToObj(i -> list.stream().map(l -> l.get(i)).collect(Collectors.toList()))
.collect(Collectors.toList());
以上代码返回以下内容:
[[1, 5], [2, 6], [3, 7], [4, 8]]
注意:这对大型列表效果不佳。