gpt4 book ai didi

java - 使用流删除深度元素

转载 作者:行者123 更新时间:2023-11-30 07:45:46 26 4
gpt4 key购买 nike

我有以下类(class)。

Class A {
List<B> b
//getters and setters
}

CLass B {
List<C> c
//getters and setters
}

Class C {
List<D> d
//getters and setter
}

Class D {}

如果特定搜索词不在列表中,我想做的是删除 list d。我试过但没有运气。我认为它删除了但未保存引用。

a.stream()
.flatMap(a-> a.getB().stream())
.flatMap(b-> b.getC().stream())
.map(c-> c.getD())
.collect(Collectors.toList())
.removeIf(list -> {
boolean toBeRemoved = true;
boolean containsMatch = list.stream().anyMatch(w-> {return w.getId().equalsIgnoreCase(searchTerm);});
if(containsMatch) {
toBeRemoved = false;
}
return toBeRemoved;
});

有人可以帮助我吗?

最佳答案

流代表对“底层”集合的 View 。这意味着当您调用 removeIf() 流时,“底层”集合根本不会受到影响。

您需要做两件事:首先“收集”您打算删除的所有项目,然后您只需将它们从需要更改的列表中删除(通过显式调用):

List<B> toBeDeleted = a.stream()....collect(Collectors.toList());
a.b.removeAll(toBeDeleted);

(上面是伪代码,我没有通过编译器运行它)

如前所述:这里真正的问题是您的误解:流上的操作通常不会影响基础集合。

关于java - 使用流删除深度元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51299479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com