【发布时间】:2018-07-12 07:18:48
【问题描述】:
我有以下课程。
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;
});
有人可以帮我吗?
【问题讨论】:
-
要明确:你想从流中删除元素,还是从真实列表中删除?!因为后者是不可能的。
a流上的操作不会改变a本身! -
所以对象'c'会有一个空列表?如果在它的列表中找到了 searchItem?
-
是的 Azro,没错。
-
只是附注,你可以简单地写
return ! someExpression;而不是boolean toBeRemoved = true; boolean containsMatch = someExpression; if(containsMatch) { toBeRemoved = false; } return toBeRemoved;结合这一事实,而不是parameter -> { return expression; },你可以写parameter -> expression...
标签: java java-8 java-stream remove-if