1. 程式人生 > >Java基礎(十一):用Java8中Stream實現不同集合過濾

Java基礎(十一):用Java8中Stream實現不同集合過濾

【前言】

       從開源中國的對Java各個版本使用投票可以看出,目前Java8還是以67%的壓倒性優勢遙遙領先(Java 11 已正式釋出,你在使用 Java 的哪個版本?);眾所周知,Stream是Java8中的一大亮點,現在分享一下自己在工作中用它解決一個需求。

【業務場景及實現】

        一、業務場景:有一個學生類,有一個班級類,查出還未分配班級的學生

        二、實現:

             1、學生類

    public static class Student {
        String studentNo;
        String studentName;
        Integer age;

        //set get 方法
       
    }

             2、班級類

   public static class StuClass {
        String className;
        String studentNo;

        //set get 方法
    } 

             3、測試方法

    public static void main(String[] args) {

        List<Student> stuList = new ArrayList<>();
        Student stu1 = new Student();
        stu1.setStudentNo("0001");
        stu1.setStudentName("張三");
        stu1.setAge(10);
        stuList.add(stu1);
        Student stu2 = new Student();
        stu2.setStudentNo("0002");
        stu2.setStudentName("李四");
        stu2.setAge(11);
        stuList.add(stu2);

        List<StuClass> stuClassList = new ArrayList<>();
        StuClass stuClass1 = new StuClass();
        stuClass1.setClassName("一年級");
        stuClass1.setStudentNo("0001");
        stuClassList.add(stuClass1);
        StuClass stuClass2 = new StuClass();
        stuClass2.setClassName("一年紀");
        stuClass2.setStudentNo("0003");
        stuClassList.add(stuClass2);

        //篩選出沒有分配班級的學生
        List<Student> collect = stuList.stream().filter(student -> stuClassList.stream().noneMatch(stuClass -> stuClass.getStudentNo().equals(student.getStudentNo()))).collect(Collectors.toList());

        System.out.println("學生學號:" + collect.get(0).getStudentNo());
        System.out.println("學生姓名:" + collect.get(0).getStudentName());

    }

             4、執行結果

【總結】

       1、Stream在處理大資料量的時候效能非常的棒;

       2、優雅的程式設計;