繁体   English   中英

如何根据 java 8 中的某些条件迭代和过滤列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM