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