在流上使用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());