java list中根据字段分组并且取某个字段最大的数据
时间: 2023-08-05 15:09:45 浏览: 96
按某一字段分组取最大(小)值所在行的数据
在Java中,我们可以使用Stream API来实现这个功能。示例代码如下:
```java
import java.util.*;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
private int score;
public Person(String name, int age, int score) {
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getScore() {
return score;
}
}
public class Main {
public static void main(String[] args) {
// 示例数据
List<Person> data = Arrays.asList(
new Person("Alice", 23, 85),
new Person("Bob", 25, 91),
new Person("Charlie", 23, 79),
new Person("David", 25, 87),
new Person("Emma", 23, 94),
new Person("Frank", 25, 83)
);
// 根据age字段分组,并取每组score字段最大值
Map<Integer, Integer> result = data.stream()
.collect(Collectors.groupingBy(Person::getAge,
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparingInt(Person::getScore)),
person -> person.map(Person::getScore).orElse(0)
)));
System.out.println(result);
}
}
```
输出结果为:
```
{25=91, 23=94}
```
其中,result是一个Map,key为age,value为每组score字段的最大值。
阅读全文