使用Stream,如果两个Student对象的age属性和score属性相同,取salary属性最高的那几个对象的集合
时间: 2024-05-08 11:14:50 浏览: 68
假设有一个List<Student>对象列表,可以按以下方式使用Stream实现:
```
List<Student> students = ...; // 假设已经初始化了一个Student列表
List<Student> result = students.stream()
.collect(Collectors.groupingBy(student -> student.getAge() + "_" + student.getScore()))
.values().stream()
.map(sameAgeAndScoreStudents -> sameAgeAndScoreStudents.stream()
.max(Comparator.comparing(Student::getSalary))
.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
```
这里的操作步骤如下:
1. 使用Stream的collect方法,按照age和score的组合生成一个Map,其中key为age_score,value为所有拥有相同age和score的Student对象的列表。
2. 使用Stream的map方法,对每一个拥有相同age和score的Student对象列表进行操作,取出其中salary属性最高的那一个对象,如果列表为空则返回null。
3. 使用Stream的filter方法,过滤掉查找结果中的null对象。
4. 最后使用Stream的collect方法,将过滤后的结果收集到一个List中并返回。
阅读全文