Java8新特性:流式操做java
public class Student { private long id; private String name; private int age; private int grade; private String major; private String school; // 省略getter和setter }
List<Student> students = new ArrayList<Student>() { { add(new Student(20160001, "孔明", 20, 1, "土木工程", "武漢大學")); add(new Student(20160002, "伯約", 21, 2, "信息安全", "武漢大學")); add(new Student(20160003, "玄德", 22, 3, "經濟管理", "武漢大學")); add(new Student(20160004, "雲長", 21, 2, "信息安全", "武漢大學")); add(new Student(20161001, "翼德", 21, 2, "機械與自動化", "華中科技大學")); add(new Student(20161002, "元直", 23, 4, "土木工程", "華中科技大學")); add(new Student(20161003, "奉孝", 23, 4, "計算機科學", "華中科技大學")); add(new Student(20162001, "仲謀", 22, 3, "土木工程", "浙江大學")); add(new Student(20162002, "魯肅", 23, 4, "計算機科學", "浙江大學")); add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大學")); } };
Stream<T> filter(Predicate<? super T> predicate),filter接受一個謂詞Predicate。經過這個謂詞定義篩選條件。如今從集合students中篩選出全部武漢大學的學生,經過filter來實現,並將篩選操做做爲參數傳遞給filter:sql
List<Student> whuStudents = students.stream() .filter(student -> "武漢大學".equals(student.getSchool())) .collect(Collectors.toList());
distinct相似於SQL語句的DISTINCT關鍵字,用於去重處理,distinct基於Object.equals(Object)實現。篩選一個「aaa」,添加distinct操做:安全
List<String> strings = new ArrayList<String>(); strings.add("aaa"); strings.add("bbb"); strings.add("ccc"); strings.add("ddd"); strings.add("aaa"); List<String> rst = strings.stream() .filter(string->"aaa".equals(string)) .distinct()//相似sql的distict關鍵字 .limit(1)//相似sql的limit關鍵字 .skip(1)//有排序的功能 .collect(Collectors.toList()); System.out.println(rst.size());
limit相似於SQL語句的LIMIT關鍵字,不過相對功能較弱,limit返回包含前n個元素的流,當集合大小小於n時,則返回實際長度。返回前兩個專業爲土木工程專業的學生:spa
List<Student> civilStudents = students.stream() .filter(student -> "土木工程".equals(student.getMajor())) .limit(2) .collect(Collectors.toList());
該操做用於對流中元素進行排序。sorted要求待比較的元素必須實現Comparable接口,若是沒有實現也沒關係,咱們能夠將比較器做爲參數傳遞給sorted(Comparator<? super T> comparator)。篩選出專業爲土木工程的年齡最小的兩個學生:code
List<Student> sorted = students.stream() .filter(student -> "土木工程".equals(student.getMajor())) .sorted((s1, s2) -> s1.getAge() - s2.getAge()) .limit(2) .collect(Collectors.toList());
跳過前n個元素,若是n大於知足條件的集合的長度,則會返回一個空的集合。找出排序在2以後的土木工程專業的學生:排序
List<Student> civilStudents = students.stream() .filter(student -> "土木工程".equals(student.getMajor())) .skip(2) .collect(Collectors.toList());
2、查詢接口
3、歸約ip