java8如何创建嵌套列表?

时间:2015-07-22 18:35:38

标签: java java-8

学习和使用Java8。试图创建一个2D数组。

final List<Integer> row = IntStream.range(0, 3)
                                   .boxed()
                                   .collect(Collectors.toList());

List<List<Integer>> arr2D = IntStream.range(0, 3)
                                     .map(i -> arr2D.add(i, row)); // will not compile

如何将行放入2D数组?这是使用Java8的正确方法吗?

2 个答案:

答案 0 :(得分:6)

您的问题提到数组,但您的代码只有列表。如果要生成嵌套List:

List<List<Integer>> arr2D = IntStream.range(0, 3)
                                     .mapToObj(i -> row)
                                     .collect(Collectors.toList());

当然,使用此代码,所有内部列表都是相同的(即相同的实例)。如果您希望每个内部列表都是不同的实例:

List<List<Integer>> arr2D = IntStream.range(0, 3)
                                     .mapToObj(i -> new ArrayList<Integer>(row))
                                     .collect(Collectors.toList());

答案 1 :(得分:2)

解决方案可能是:

List<List<Integer>> lists = IntStream.range(0, 3)
                                     .mapToObj(i -> IntStream.range(0, 3)
                                                             .mapToObj(j -> j)
                                                             .collect(Collectors.toList()))
                                     .collect(Collectors.toList());