簡體   English   中英

在Java中直接訪問ArrayList中的列

[英]Access directly a column inside an ArrayList in Java

我試圖訪問的不是2D ArrayList中的單個元素,而是整個列。 由於在需要一行時很容易做到這一點(因為2D數組是按行和列讀取的),所以對列執行相同操作對我來說並不容易。

您對此有何建議?

任何幫助將不勝感激!

非常感謝!

最好的方法是在List中使用List

List<List<String>> listWithList = new ArrayList<List<String>>();

要從 List獲取 List ,您需要為第一個子 List調用例如0

List<String> anotherList = new ArrayList<String>();
anotherList = listWithList.get(0); // get the first complete List

要從 List獲取String ,您需要調用:

String someText = anotherList.get(0); // get the first String

或直接從List中的List

String moreText = listWithList.get(0).get(0); // get the first String from the first List

無法直接訪問2D面向行的列表中的列。 但是,您可以始終提取所需的值。

要檢索索引n處的列,您可以簡單地運行:

twoDList.stream().map(innerList -> innerList.get(n))
                 .collect(Collectors.toList());

這也可以輕松更改為普通的for-each循環。

List<T> column = new ArrayList<T>();

for(List<T> row: twoDList) {
    column.add(row.get(n));
}

我最近在這里發布了類似的內容。

在這里,我創建了一個ColumnList對象,該對象使我可以操縱2D數組的單個列。 在這種情況下,我正在對其進行排序。

class ColumnList<T> extends AbstractList<T> implements List<T> {
    private final T[][] array;
    private final int column;

    public ColumnList(T[][] array, int column) {
        this.array = array;
        this.column = column;
    }

    @Override
    public T get(int index) {
        return array[index][column];
    }

    @Override
    public T set(int index, T element) {
        return array[index][column] = element;
    }

    @Override
    public int size() {
        return array.length;
    }
}

public void test(String[] args) {
    Integer[][] array = {
            {6, 8, 9, 16},
            {0, 6, -3, 4},
            {18, 2, 1, 11}
    };
    System.out.println("Before: " + Arrays.deepToString(array));
    // Sort each column separately.
    for (int i = 0; i < array[0].length; i++) {
        List<Integer> column = new ColumnList<>(array, i);
        Collections.sort(column);
    }
    System.out.println("After:  " + Arrays.deepToString(array));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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