Java基礎(十一):用Java8中Stream實現不同集合過濾
阿新 • • 發佈:2019-01-09
【前言】
從開源中國的對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、優雅的程式設計;