[英]How to iterate and filter a list based on some condition in java 8?
我有一个列表(列表值来自 DB,实体 class 是 EmployeeMaster):
employeeList =
elementData=
[0] = {empId = 1, empName = 'David', empRole = 'Sales'}
[1] = {empId = 2, empName = 'Lee', empRole = 'Practice'}
想要遍历并检查 [0]^th 是否包含“销售”然后将数据放入 map 否则另一个 map
if(employeeList.stream().anyMatch(emp -> emp.getEmpRoles().contentEquals("Sales"))) {
salesEmployeeDataMap = employeeList.stream().collect(Collectors.toMap(EmployeeMaster :: getEmpId, EmployeeMaster :: getEmpName));
} else {
practiceEmployeeDataMap = employeeList.stream().collect(Collectors.toMap(EmployeeMaster :: getEmpId, EmployeeMaster :: getEmpName));
}
此代码将第 [0] 个和第 [1] 个值都放入 practiceEmployeeDataMap。 但欲望已经熄灭
salesEmployeeDataMap = {1, David}
practiceEmployeeDataMap = {2, Lee}
有人可以用java8帮我吗
这是具有简单循环的相同解决方案:
for(EmployeeMaster list : employeeList) {
if(list.getEmpRoles().equalsIgnoreCase("Sales")) {
salesEmployeeDataMap.put(list.getEmpId(), list.getEmpName());
} else {
practiceEmployeeDataMap.put(list.getEmpId(), list.getEmpName());
}
}
if(employeeList.stream().findFirst(emp -> emp.getEmpRoles().contentEquals("Sales"))) { salesEmployeeDataMap = employeeList.stream().collect(Collectors.toMap(EmployeeMaster:: getEmpId, EmployeeMaster:: getEmpName)); } else { practiceEmployeeDataMap = employeeList.stream().collect(Collectors.toMap(EmployeeMaster:: getEmpId, EmployeeMaster:: getEmpName)); }
您可以使用 findFirst 查找索引“0”th position。 请分享您的反馈
两个值 go 到practiceEmployeeDataMap
的原因是条件employeeList.stream().anyMatch(emp -> emp.getEmpRoles().contentEquals("Sales"))
使用anyMatch
。
用简单的英语来说,条件是 - 列表中是否至少有一名员工的角色是“销售”?
由于您确实有一个角色为“Sales”的员工,因此此条件的计算结果为真,并且所有值 go 到practiceEmployeeDataMap
。
现在,关于如何在 Java 8 中执行此操作 - 您所谓的“简单循环”确实很简单,在我看来,这是一个优雅的解决方案。 并不是所有的东西都必须被强制放入流中,在这种情况下,使用流就不会那么优雅了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.