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