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

相关文章
相关标签/搜索