如何用Java 8基于内部列表数据对主列表进行排序?
Java 8 实现多层级排序方案
核心实现思路
完全可以用Java 8的特性完成简洁排序,不需要编写多个自定义Comparator,利用Comparator.comparing方法引用和链式调用就能满足需求:先按subjectCode对Department排序,再对每个Department下的Employee按employeeName排序。
代码实现
分步实现(清晰直观)
// 按subjectCode对Organization中的Department列表排序 organization.getDepartments().sort(Comparator.comparing( dept -> dept.getSubjects().get(0).getSubjectCode() )); // 对每个Department内部的Employee列表按employeeName排序 organization.getDepartments().forEach( dept -> dept.getEmployees().sort(Comparator.comparing(Employee::getEmployeeName)) );
链式合并实现(近似“单行”)
如果要把两个操作合并成链式调用,可借助Stream.peek()先处理内部员工排序,再对部门排序:
organization.setDepartments( organization.getDepartments().stream() .peek(dept -> dept.getEmployees().sort(Comparator.comparing(Employee::getEmployeeName))) .sorted(Comparator.comparing(dept -> dept.getSubjects().get(0).getSubjectCode())) .collect(Collectors.toList()) );
关键说明
- 由于
Subject列表仅包含单个对象,直接通过getSubjects().get(0)获取对应对象即可;若业务场景存在空值风险,可添加Optional做安全处理。 Comparator.comparing会自动生成基于指定属性的比较器,结合方法引用Employee::getEmployeeName进一步简化代码逻辑。
内容的提问来源于stack exchange,提问作者user2692291
相关产品推荐
相关产品推荐

