Java 面试笔试题 - Stream 和 Lambda 表达式的使用

请按以下步骤实现代码

  • 创建一个新的 JDK 1.8 项目,能运行 main 方法即可

  • 新建一个 Record 类,类中包含以下属性 level, teacher, student

  • 构建一个 List 集合,集合中包含 8 个 Record 对象, Record 对象包含以下属性:
    Level(年级),Teacher(老师姓名),Student(学生姓名)

    每个对象的属性值如下:

Level Teacher Student
L1 Li S1
L1 Wang S2
L1 Wang S3
L2 Li S4
L2 Li S5
L2 Wang S6
L3 Wang S7
L3 Wang S8

然后实现以下数据统计,要求使用 Java 8 的 Stream 和 Lambda 表达式

  • 使用 Stream 集合操作统计每个年级有多少名学生,打印在输出窗口即可,输出效果:
    {L1=3, L2=3, L3=2}

  • 使用 filter 方法进行过滤,列出老师 Li 的所有学生姓名,输出效果:
    {Li=[S1, S4, S5]}

  • 列出每个老师,每个年级的学生数量,输出效果:
    {Wang={L1=2, L2=1, L3=2}, Li={L1=1, L2=2}}

可参考 Java 文档:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html

答案

新建一个 TestRecord 类,把以下代码赋值复制进入

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class TestRecord {
    
    
    public static void main(String[] args) {
    
    
        List<Record> list = new ArrayList<>();
        list.add(new Record("L1", "Li", "S1"));
        list.add(new Record("L1", "Wang", "S2"));
        list.add(new Record("L1", "Wang", "S3"));
        list.add(new Record("L2", "Li", "S4"));
        list.add(new Record("L2", "Li", "S5"));
        list.add(new Record("L2", "Wang", "S6"));
        list.add(new Record("L3", "Wang", "S7"));
        list.add(new Record("L3", "Wang", "S8"));
        // 使用 Stream 集合操作统计每个年级有多少名学生,打印在输出窗口即可,输出效果:  {L1=3, L2=3, L3=2}
        Map<String, Long> record1 = list.stream().collect(Collectors.groupingBy(Record::getLevel, Collectors.counting()));
        System.out.println(record1);
        // 使用 filter 方法进行过滤,列出老师 Li 的所有学生姓名,输出效果:  {Li=[S1, S4, S5]}
        Map<String, List<String>> result = list.stream()
                .filter(record -> "Li".equals(record.getTeacher()))
                .collect(Collectors.groupingBy(Record::getTeacher, Collectors.mapping(Record::getStudent, Collectors.toList())));
        System.out.println(result);
        // 列出每个老师,每个年级的学生数量
        Map<String,Map<String,Long>> collect = list.stream().collect(Collectors.groupingBy(Record::getTeacher,Collectors.groupingBy(Record::getLevel,Collectors.counting())));
        System.out.println(collect);
    }
}

class Record {
    
    
    private String level;
    private String teacher;
    private String student;

    public Record() {
    
    
    }
    public Record(String level, String teacher, String student) {
    
    
        this.level = level;
        this.teacher = teacher;
        this.student = student;
    }
    public String getLevel() {
    
    
        return level;
    }
    public void setLevel(String level) {
    
    
        this.level = level;
    }

    public String getTeacher() {
    
    
        return teacher;
    }

    public void setTeacher(String teacher) {
    
    
        this.teacher = teacher;
    }

    public String getStudent() {
    
    
        return student;
    }
    public void setStudent(String student) {
    
    
        this.student = student;
    }
    @Override
    public String toString() {
    
    
        return "Record{" +
                "level='" + level + '\'' +
                ", teacher='" + teacher + '\'' +
                ", student='" + student + '\'' +
                '}';
    }
}

结果

{
    
    L1=3, L2=3, L3=2}
{
    
    Li=[S1, S4, S5]}
{
    
    Wang={
    
    L1=2, L2=1, L3=2}, Li={
    
    L1=1, L2=2}}

猜你喜欢

转载自blog.csdn.net/qq_43108153/article/details/136533807