[英]Casting 2d Array to List of lists in Java
所以,這可能是一個簡單的問題,但我找不到任何簡單或優雅的方法來做到這一點。 在 Java 中將數組轉換為列表是微不足道的
Double[] old = new Double[size];
List<Double> cast = Arrays.asList(old);
但我目前正在處理圖像,我希望能夠將此功能擴展到二維數組,而不必遍歷附加到列表的數組的一維。
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]));
}
我想要比這更好並且可能更快的東西。
唯一更快的方法是使用更高級的視圖; 你可以像這樣用番石榴做到這一點:
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,如果你最終使用番石榴,你可以使用Doubles.asList(double[])
所以你可以使用原始double[][]
而不是盒裝Double[][]
。)
在JAVA 8 stream APIs
我們可以以更快、更清晰的方式從二維數組中獲取列表列表。
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());
作為 Java8,你做Arrays.stream(array).map(Arrays::asList).collect(Collectors.toList())
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.