首页 > 解决方案 > 使用 Java8 Stream 迭代 java 嵌套列表

问题描述

我有一个这样的 EmployObject Java 列表

List<Employee> emp = {emp1, emp2, emp3, emp4 ,...}

Where the Employee class looks like this 

Public Class Employee {
    String EmpId;
    EmpInfo empInfo;
}

public class EmpInfo {
   String salary;
   String address;
   List<Reviews> reviews;
}

public class Reviews {
   int ratings;
   boolean isGood;
}

我想使用 Java8 流来遍历列表 (List emp) 并过滤具有多个评级 (List lenghth > 1) 且评级良好 (isGood == true) 的 EmpId。新列表看起来像

列出 empRating = {empRating1, empRating2, ...}

public class EmpRating {
   String empId;
   int ratings;
}


我尝试了不同的方法,但无法找到优化的解决方案。需要帮助。

标签: javajava-8java-streamnested-lists

解决方案


只是一个例子:

  • 选择至少有一个评级的员工isGood
  • 计算所有评级的总和
employeeList.stream()
    .filter(emp -> emp.getEmpInfo().getReviews().size() > 1
                && emp.getEmpInfo().getReviews().stream().anyMatch(Reviews::isGood))
    .map(emp -> new EmpRating(
        emp.getEmpId(), 
        emp.getEmpInfo().getReviews().stream().mapToInt(Reviews::getRatings).sum()
    ))
    .collect(Collectors.toList());

推荐阅读