簡體   English   中英

在將相同的元素添加到新的 ArrayList 之后,有什么方法可以從給定的 ArrayList 中刪除一些元素?

[英]Is there any way to delete some elements from a given ArrayList after adding the same elements to a new ArrayList?

例如,有一個元素列表。 我們在這個列表中調用 streamMethod。 現在我們想通過條件從列表中提取某個元素並將其添加到新列表中。

例子:

List<Integer> intList = new ArrayList<>();

for (int i = 0; i < 100; i++) {
        intList.add(i);
}

public static List<Integer> getIntFive(List<Integer> list) {
    return list.stream().filter(i -> i.equals(5)).collect(Collectors.toList());

}

public static List<Integer> getIntEight(List<Integer> list) {
    return list.stream().filter(i -> i.equals(8)).collect(Collectors.toList());

}

有沒有辦法從原始列表中刪除添加到新列表中的項目? 可以將另一個 stream 鏈接到第一個后面,從而影響原始列表的屬性嗎?

流式傳輸時無法刪除,但迭代兩次沒有害處,例如:

    List<Integer> initial = new ArrayList<>(List.of(1, 2, 3, 4, 5));
    List<Integer> result = new ArrayList<>();

    initial.forEach(x -> {
        if (x > 3) {
            result.add(x);
        }
    });

    // or simply : initial.removeAll(result);
    initial.removeIf(result::contains);

    System.out.println(initial); // 1,2,3
    System.out.println(result); // 4,5

更接近您當前的實現,執行操作的另一種方法是:

public static List<Integer> getIntEight(List<Integer> list) {
    List<Integer> res = list.stream()
            .filter(i -> i.equals(8))
            .collect(Collectors.toList());
    list.removeAll(res);
    return res;
}

暫無
暫無

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

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