Java|Java8的流式數據

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, "土木工程", "南京大學"));
    }
};

1、過濾

filter 

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

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

limit相似於SQL語句的LIMIT關鍵字,不過相對功能較弱,limit返回包含前n個元素的流,當集合大小小於n時,則返回實際長度。返回前兩個專業爲土木工程專業的學生:spa

List<Student> civilStudents = students.stream()
                                    .filter(student -> "土木工程".equals(student.getMajor()))
                                    .limit(2)
                                    .collect(Collectors.toList());

sorted

該操做用於對流中元素進行排序。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());

skip

跳過前n個元素,若是n大於知足條件的集合的長度,則會返回一個空的集合。找出排序在2以後的土木工程專業的學生:排序

List<Student> civilStudents = students.stream()
                                .filter(student -> "土木工程".equals(student.getMajor()))
                                .skip(2)
                                .collect(Collectors.toList());

2、查詢接口

3、歸約ip

相關文章
相關標籤/搜索