在流上使用Java筛选器,在流筛选器中使用

在流上使用Java筛选器,在流筛选器中使用,java,java-8,java-stream,Java,Java 8,Java Stream,我有项目和地址课程: public class Item { String name; List<Address> address; } public class Address { String name; String lane; } 您可以在内部流上使用: items.stream().filter(a->a.getAddress().stream(). anyMatch(b->"lane1".equals(b.g

我有
项目
地址
课程:

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

public class Address {  
    String name;
    String lane;
}
您可以在内部流上使用:

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

您得到类型不匹配错误,因为过滤器必须返回布尔结果,而在您的情况下,内部流返回的是
不是布尔值

正如@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());
//您可以在anyMatch中直接使用谓词
谓词maybe
“lane1”.equals(b.getLane())
// 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());