可以使用Java 8的Stream流进行多条件分组求最大值的操作。首先,需要将数据集合转换为Stream流,然后使用collect()方法进行分组和聚合操作。

假设有一个学生类Student,包含属性name(姓名)、age(年龄)和score(分数)。我们希望按照姓名和年龄分组,并求每个组的最高分数。

代码示例如下:

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("Alice", 18, 90),
                new Student("Bob", 18, 95),
                new Student("Alice", 20, 85),
                new Student("Bob", 20, 80)
        );

        Map<String, Map<Integer, Integer>> maxScores = students.stream()
                .collect(Collectors.groupingBy(Student::getName,
                        Collectors.groupingBy(Student::getAge,
                                Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Student::getScore)), // 获取最大值
                                        student -> student.map(Student::getScore).orElse(0)))));

        System.out.println(maxScores);
    }
}

class Student {
    private String name;
    private int age;
    private int score;

    public Student(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;
    }
}

输出结果为:

{Alice={18=90, 20=85}, Bob={18=95, 20=80}}

可以看到,最终的结果是一个Map对象,其中键是姓名,值是另一个Map对象,其中键是年龄,值是最高分数

stream流多条件分组求最大值

原文地址: https://www.cveoy.top/t/topic/iCKI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录