MST

星途 面试题库

面试题:Java Stream collect方法在复杂对象集合中的批量运算

定义一个类Student,包含属性name(字符串类型)和scores(List<Integer>类型,表示各科成绩)。现有一个List<Student> students集合,使用Java Stream的collect方法,计算每个学生的平均成绩,并将结果以Map<String, Double>的形式返回,其中键为学生的名字,值为平均成绩。
34.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.*;
import java.util.stream.Collectors;

class Student {
    private String name;
    private List<Integer> scores;

    public Student(String name, List<Integer> scores) {
        this.name = name;
        this.scores = scores;
    }

    public String getName() {
        return name;
    }

    public List<Integer> getScores() {
        return scores;
    }
}

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

        Map<String, Double> averageScores = students.stream()
               .collect(Collectors.toMap(
                        Student::getName,
                        student -> student.getScores().stream()
                               .mapToInt(Integer::intValue)
                               .average()
                               .orElse(0.0)
                ));

        System.out.println(averageScores);
    }
}

上述代码首先定义了Student类,包含namescores属性。然后在main方法中创建了一个students列表。接着使用Java Streamcollect方法,将学生的名字作为键,平均成绩作为值,收集到一个Map<String, Double>中。Collectors.toMap方法接受两个参数,第一个参数用于提取键,第二个参数用于计算值。在计算值时,通过average方法获取平均成绩,如果没有成绩则返回0.0。