2017-09-13 1 views
4

Ich habe eine Liste von "Artikel" und jedes Element hat eine Eigenschaft von item.posts (das ist eine Liste von Post-Instanzen).Stream anyMatch mit Liste

Ich will meinen „item“ -Liste von zwei Eigenschaften filtern:

Wenn „item.isBig“ und wenn jeder Beitrag eines Elements aktiviert ist, dann die zurück Stream sammeln.

Allerdings weiß ich nicht, wie man "anyMatch" mit "i.getPosts # isEnabled" macht.

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

Antwort

7

anyMatch ist ein Terminalbetrieb, so dass Sie es nicht in Kombination mit collect verwenden können.

Sie können zwei Filter anwenden:

List<Item> filtered = 
    items.stream() 
     .filter(Item::isBig) 
     .filter(i -> i.getPosts().stream().anyMatch(Post::isEnabled)) 
     .collect(Collectors.toList()); 

oder sie in einem Filter kombinieren:

List<Item> filtered = 
    items.stream() 
     .filter(i -> i.isBig() && i.getPosts().stream().anyMatch(Post::isEnabled)) 
     .collect(Collectors.toList()); 
Verwandte Themen