我有一个“项目”列表,每个项目都有item.posts属性(这是一个后期实例列表)。
我想通过两个属性过滤我的“item”列表:
如果“item.isBig”以及项目的任何帖子已启用,则收集返回的Stream
。
但是,我不知道如何使用“i.getPosts#isEnabled”执行“anyMatch”。
items.stream()
.filter(Item::isBig)
.anyMatch(i.getPosts()->p.isEnabled) // this does not work
.collect(Collectors.toList());
答案 0 :(得分:8)
anyMatch
是一项终端操作,因此您无法将其与collect
结合使用。
您可以应用两个过滤器:
List<Item> filtered =
items.stream()
.filter(Item::isBig)
.filter(i -> i.getPosts().stream().anyMatch(Post::isEnabled))
.collect(Collectors.toList());
或将它们组合成一个过滤器:
List<Item> filtered =
items.stream()
.filter(i -> i.isBig() && i.getPosts().stream().anyMatch(Post::isEnabled))
.collect(Collectors.toList());