MST
星途 面试题库

面试题:Java Stream多方法组合实现复杂数据过滤与转换

假设有一个包含学生信息的List,学生类Student包含属性name(姓名)、age(年龄)、scores(科目成绩的Map,键为科目名称,值为成绩)。要求使用Java Stream多方法组合,过滤出年龄大于18岁,并且至少有一门科目成绩大于90分的学生,然后将这些学生的姓名收集到一个新的List中。请写出Student类的定义以及完整的Java代码实现。
22.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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

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

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Map<String, Integer> getScores() {
        return scores;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> studentList = new ArrayList<>();

        Map<String, Integer> scores1 = new HashMap<>();
        scores1.put("Math", 85);
        scores1.put("English", 92);
        studentList.add(new Student("Alice", 20, scores1));

        Map<String, Integer> scores2 = new HashMap<>();
        scores2.put("Math", 88);
        scores2.put("English", 89);
        studentList.add(new Student("Bob", 17, scores2));

        List<String> resultList = studentList.stream()
               .filter(student -> student.getAge() > 18)
               .filter(student -> student.getScores().values().stream().anyMatch(score -> score > 90))
               .map(Student::getName)
               .collect(Collectors.toList());

        System.out.println(resultList);
    }
}