sja*_*der 5 java-8 java-stream
我是 Java 8 和 Stream API 的新手。
如果我有一个 Employee 对象列表:
List<Employee> employees;
public class Employee {
private String name;
private List<Project> involvedInProjects;
}
public class Project {
private int projectId;
}
Run Code Online (Sandbox Code Playgroud)
我想过滤参与某些项目的员工,我将如何使用 java 8 中的流 API 执行此操作?
如果我有一个 Map ,其中键是唯一的员工 ID 而不是 List 会更容易吗?
因此,您可以访问流操作中的嵌套列表,然后使用它。在这种情况下,我们可以使用嵌套流作为过滤器的谓词
employees.stream().filter(
employee -> employee.involvedInProjects.stream()
.anyMatch(proj -> proj.projectId == myTargetId ))
Run Code Online (Sandbox Code Playgroud)
这将为您提供至少一个与您的 targetId 匹配的项目的所有员工的流。从这里您可以进一步操作流或将流收集到列表中.collect(Collectors.toList())
如果您不介意修改列表,您可以使用您removeIf
将作为参数提供的谓词来检查员工参与的项目是否与给定的 ID 不匹配。
例如,
employees.removeIf(e -> e.getInvolvedInProjects().stream().anyMatch(p -> p.getProjectId() == someId));
Run Code Online (Sandbox Code Playgroud)
如果列表不支持删除元素,请从列表中获取流employees
并使用相反的谓词(在本例中您可以使用.noneMatch(p -> p.getProjectId() == someId)
)对其进行过滤removeIf
,并使用 收集结果Collectors.toList()
。
归档时间: |
|
查看次数: |
13815 次 |
最近记录: |