java8如何创建嵌套列表?

Luc*_*ess 3 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
Run Code Online (Sandbox Code Playgroud)

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

Era*_*ran 6

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

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

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

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

  • @ Z-1:然后你应该通过[`unmodifiableList`]包装内部列表(http://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#unmodifiableList-java.util .List-)在创建嵌套列表之前,为了确保,您会注意到您的假设(仅读取遍历发生)是错误的.然后,你根本不需要流操作,只需说`arr2D = Collections.nCopies(3,Collections.unmodifiableList(row));`... (3认同)