如何使用lambda来收集java8中多个列表中具有相同索引的元素

时间:2015-08-15 10:04:51

标签: java lambda java-8 java-stream

我现在正在使用Java8,

我想要做的是从每个列表中的元素索引中选择不同列表中的元素

我遵守了代码:

List<List<Integer>> lst = Arrays.asList(
            Arrays.asList(1, 4, 7),
            Arrays.asList(2, 5, 8),
            Arrays.asList(3, 6, 9)
    );

我希望输出结果如下:

[[1,2,3],[4,5,6],[7,8,9]]

我试过但没有得到结果。那么请你给我一些提示?

1 个答案:

答案 0 :(得分:2)

您可以创建IntStream列表索引并映射它们。以下代码解决了您的问题(假设输入列表非空并且每行具有相同数量的值):

List<List<Integer>> transposed = IntStream.range(0, lst.get(0).size())
    .mapToObj(idx -> lst.stream().map(l -> l.get(idx)).collect(Collectors.toList()))
    .collect(Collectors.toList());