我是Java 8和Stream API的新手。
如果我有一个Employee对象的列表:
List<Employee> employees;
public class Employee {
private String name;
private List<Project> involvedInProjects;
}
public class Project {
private int projectId;
}
我想过滤某些项目中涉及的员工,我将如何使用Java 8中的流API来做到这一点?
如果我有一个键是唯一的employeeID而不是List的Map,会更容易吗?
如果您不介意在适当位置修改列表,则可以使用removeIf
并且将作为参数给出的谓词将检查涉及员工的项目是否与给定的ID不匹配。
例如,
employees.removeIf(e -> e.getInvolvedInProjects().stream().anyMatch(p -> p.getProjectId() == someId));
如果列表不支持删除元素,请从employees
列表中获取流,并使用与之相反的谓词(在这种情况下,可以使用.noneMatch(p -> p.getProjectId() == someId)
)对其进行过滤,并使用removeIf
收集结果Collectors.toList()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句