See*_*hor 5 java collections java-stream
我正在尝试更好地理解如何使用 Java 流。我有这些课程:
public class Plan {
List<Request> requestList;
}
public class Request {
List<Identity> identityList;
boolean isCancelled;
}
public class Identity {
String idNumber;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个方法,该方法返回包含具有匹配标识号的未取消请求的计划。
这是我尝试过的:
public static Plan findMatchingPlan(List<Plan> plans, String id) {
List<Plan> filteredPlan = plans.stream()
.filter(plan -> plan.getRequestList().stream()
.filter(request -> !request.isCancelled())
.filter(request -> request.getIdentityList().stream()
.filter(identity -> identity.getIdNumber().equals(id))))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
java.util.stream.Stream<com.sandbox.Identity> cannot be converted to boolean
Run Code Online (Sandbox Code Playgroud)
我有点理解为什么会出现错误。嵌套过滤器返回一个不能被评估为布尔值的过滤器。问题是,我不知道我错过了什么。
任何帮助,将不胜感激。
假设你想先匹配Plan,它可以像这样使用 lambda 表达式来完成:
public static Plan findMatchingPlan(List<Plan> plans, String id) {
return plans.stream()
.filter(plan -> plan.getRequestList()
.stream()
.filter(request -> ! request.isCancelled())
.flatMap(request -> request.getIdentityList().stream())
.anyMatch(identity -> identity.getIdNumber().equals(id)))
.findFirst()
.orElse(null);
}
Run Code Online (Sandbox Code Playgroud)
或者像这样,使用方法引用,并找到任何匹配Plan:
public static Plan findMatchingPlan(List<Plan> plans, String id) {
return plans.stream()
.filter(plan -> plan.getRequestList()
.stream()
.filter(request -> ! request.isCancelled())
.map(Request::getIdentityList)
.flatMap(List::stream)
.map(Identity::getIdNumber)
.anyMatch(id::equals))
.findAny()
.orElse(null);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1112 次 |
| 最近记录: |