2017-09-13 58 views
4

我有一個「項目」列表和每個項目都有item.posts屬性(這是一個post-instances列表)。用列表流anyMatch

我想兩個屬性篩選我的「項目」 -list:

如果「item.isBig」,如果啓用了項目的任何職位,然後收集返回Stream

但是,我不知道如何做「anyMatch」與「i.getPosts#isEnabled」。

items.stream() 
    .filter(Item::isBig) 
    .anyMatch(i.getPosts()->p.isEnabled) // this does not work 
    .collect(Collectors.toList()); 

回答

7

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());