所以,这可能是一个简单的问题,但我无法找到任何简单或优雅的方法来做到这一点。在Java中将数组转换为列表是微不足道的
Double[] old = new Double[size];
List<Double> cast = Arrays.asList(old);
但我目前正在处理图像,我希望能够将此功能扩展到2d数组,而不必迭代遍历列表的数组的一个维度。
Double[][] -> List<List<Double>>
基本上是我想要实现的目标。我有一个解决方案:
Double[][] old= new Double[width][height];
List<List<Double>> new= new ArrayList<List<Double>>();
for (int i=0;i<old.length();i++){
new.add(Arrays.asList(old[i]));
}
我想要更好的东西,并且可能比这更快。
答案 0 :(得分:1)
唯一更快的方法就是拥有一个更加美好的视角;你可以用Guava这样做:
Double[][] array;
List<List<Double>> list = Lists.transform(Arrays.asList(array),
new Function<Double[], List<Double>>() {
@Override public List<Double> apply(Double[] row) {
return Arrays.asList(row);
}
}
}
以恒定时间返回视图。
除此之外,您已经拥有了最佳解决方案。
(FWIW,如果你最终使用Guava,你可以使用Doubles.asList(double[])
,这样你就可以使用原始double[][]
而不是盒装Double[][]
。)
答案 1 :(得分:0)
JAVA 8 stream APIs
之后,我们可以以更快,更干净的方式从2d数组中获取列表列表。
Double[][] old= new Double[width][height];
List<List<Double>> listOfLists = Arrays.stream(Objects.requireNonNull(old)).map(row -> {
return Arrays.asList((row != null) ? row : new Double[0]);
}).collect(Collectors.toList());
答案 2 :(得分:0)
作为 Java8,您需要Arrays.stream(array).map(Arrays::asList).collect(Collectors.toList())
。