嵌套java8流以获取Predicate的集合

时间:2015-04-13 17:02:23

标签: java java-8

我正在尝试使用基于某些谓词的Java8中的流来从集合中获取对象的集合

这是我尝试过的,但是这里有一些语法错误。:

Collection<object> objectCollectionNew = objectCollection.stream().filter(o -> objectCollection.stream().filter( x- > x.isTrue == o.isTrue));

所以基本上我想根据我的谓词从objectCollection中获取一组对象。另外,我不确定如何将其收集到我的Collection<object>

.collect(Collectors.to ?? )

一些帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

目前还不完全清楚你要做什么,但是如果你想找到你的集合的所有元素isTrue等于集合中其他元素的isTrue ,你会这样做:

objectColelction.stream()
    .filter(o -> objectColelction.stream().anyMatch(x -> x.isTrue == o.isTrue))
    .collect(Collectors.toList());

答案 1 :(得分:0)

您似乎想要使用flatMap

Collection<object> objectCollectionNew = objectCollection.stream()
                                              .flatMap(o -> objectCollection.stream().filter(x -> x.isTrue == o.isTrue))
                                              .collect(Collectors.toList());

答案 2 :(得分:0)

我遇到了类似的问题,它在Eclipse语法分析器中看起来像是一个错误。我通过添加括号

解决了这个问题
Collection<object> objectCollectionNew = objectCollection.stream()
.filter( x -> {return x.isTrue == o.isTrue;} )
.collect(Collectors.toList());

回答语法方面,而不是如何最好地解决过滤本身。