簡體   English   中英

在流過濾器中使用流過的Java過濾器

[英]Use Java filter on stream with in a stream filter

我有ItemAddress類:

public class Item {
    String name;
    List<Address> address;
}

public class Address {  
    String name;
    String lane;
}

假設我有一個項目列表,並希望過濾具有"lane1"項目的項目。

我嘗試下面但在Eclipse中它顯示:

“類型不匹配:無法從流地址轉換為布爾值”

items.stream().filter(a->a.getAddress().stream().
      filter(b->b.getLane().equals("lane1"))).collect(Collectors.toList());

您可以在內部流上使用anyMatch

items.stream().filter(a->a.getAddress().stream().
      anyMatch(b->"lane1".equals(b.getLane()))).collect(Collectors.toList());

您遇到類型不匹配錯誤,因為過濾器必須返回布爾結果,在您的情況下,內部流返回Stream<Address>而不是布爾值。

所以@Sweeper回答說,你可以使用anyMatch

// you can directly use predicate in anyMatch 
    Predicate<? super Address> equalsLane1 =  address->address.getLane().equals("lane1");
    List<Item> lane1 = items.stream().filter(ele ->
               ele.getAddress().stream().anyMatch(equalsLane1)).collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM