簡體   English   中英

將二維數組轉換為 Java 中的列表列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM