使用流将Java 2D数组转换为2D ArrayList

时间:2016-05-03 09:03:24

标签: java arrays arraylist java-8 java-stream

所以我有一个Integer[][] data我想要转换为ArrayList<ArrayList<Integer>>,所以我尝试使用流并提出以下行:

ArrayList<ArrayList<Integer>> col = Arrays.stream(data).map(i -> Arrays.stream(i).collect(Collectors.toList())).collect(Collectors.toCollection(ArrayList<ArrayList<Integer>>::new));

但是最后一部分collect(Collectors.toCollection(ArrayList<ArrayList<Integer>>::new))给了我一个错误,它无法转换ArrayList<ArrayList<Integer>> to C

1 个答案:

答案 0 :(得分:4)

内部collect(Collectors.toList()会返回List<Integer>,而不是ArrayList<Integer>,因此您应该将这些内部List收集到ArrayList<List<Integer>>中:

ArrayList<List<Integer>> col = 
    Arrays.stream(data)
          .map(i -> Arrays.stream(i)
                          .collect(Collectors.toList()))
          .collect(Collectors.toCollection(ArrayList<List<Integer>>::new));

或者,使用Collectors.toCollection(ArrayList<Integer>::new)收集内部Stream的元素:

ArrayList<ArrayList<Integer>> col = 
     Arrays.stream(data)
           .map(i -> Arrays.stream(i)
                           .collect(Collectors.toCollection(ArrayList<Integer>::new)))
           .collect(Collectors.toCollection(ArrayList<ArrayList<Integer>>::new));