MST

星途 面试题库

面试题:Java Lambda表达式在复杂集合操作中的运用

有一个包含学生对象的List<Student>,Student类包含name(姓名)、age(年龄)和scores(一个包含多门课程成绩的List<Integer>)属性。请使用Java Lambda表达式找出年龄大于18岁且平均成绩大于80分的学生,并按照平均成绩从高到低排序,最后返回这些学生的姓名。请给出完整代码实现,包括Student类的简单定义。
49.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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

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

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

    public double getAverageScore() {
        return scores.stream()
               .mapToInt(Integer::intValue)
               .average()
               .orElse(0.0);
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> students = Arrays.asList(
                new Student("Alice", 20, Arrays.asList(85, 90, 78)),
                new Student("Bob", 17, Arrays.asList(70, 80, 75)),
                new Student("Charlie", 19, Arrays.asList(88, 92, 85)),
                new Student("David", 22, Arrays.asList(75, 80, 78))
        );

        List<String> result = students.stream()
               .filter(student -> student.getAge() > 18 && student.getAverageScore() > 80)
               .sorted(Comparator.comparingDouble(Student::getAverageScore).reversed())
               .map(Student::getName)
               .collect(Collectors.toList());

        System.out.println(result);
    }
}