Java 8 Stream API 引入和使用

引入流流是什么流是Java API的新成员,它允许你以声明性的方式处理数据集合 。可以看成遍历数据集的高级迭代 。流可以透明地并行处理,无需编写多线程代码 。我们先简单看一下使用流的好处 。下面两段代码都是用来返回年龄小于14岁的初中生的姓名,并按照年龄排序 。
假如我们有下面Student实体类
@Datapublic class Student {private String name;private int age;private boolean member;private Grade grade;public Student() {}public Student(String name, int age, boolean member, Grade grade) {this.name = name;this.age = age;this.member = member;this.grade = grade;}public enum Grade{JUNIOR_ONE,JUNIOR_TWO,JUNIOR_THREE}}Java 8之前的实现方式:
List<Student> students = Arrays.asList(new Student("张初一", 13, false, Student.Grade.JUNIOR_ONE),new Student("李初二", 14, false, Student.Grade.JUNIOR_TWO),new Student("孙初三", 15, false, Student.Grade.JUNIOR_THREE),new Student("王初一", 12, false, Student.Grade.JUNIOR_ONE),new Student("钱初二", 14, false, Student.Grade.JUNIOR_TWO),new Student("周初三", 16, false, Student.Grade.JUNIOR_THREE));List<Student> resultStudent = new ArrayList<>(); //垃圾变量,一次性的中间变量//foreach循环,根据条件筛选元素for (Student student : students) {if (student.getAge() < 14) {resultStudent.add(student);}}//匿名类 , 给元素排序Collections.sort(resultStudent, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Integer.compare(o1.getAge(), o2.getAge());}});List<String> resultName = new ArrayList<>();//foreach循环,获取元素属性for (Student student : resultStudent) {resultName.add(student.getName());}Java 8流的实现方式:
List<String> resultName = students.stream().filter(student -> student.getAge() < 14) //年龄筛选.sorted(Comparator.comparing(Student::getAge)) //年龄排序.map(Student::getName) //提取姓名.collect(Collectors.toList());//将提取的姓名保存在List中为了利用多核架构并行执行这段代码,只需要把stream()替换成parallelStream()即可 。
通过对比两段代码之后 , Java8流的方式有几个显而易见的好处 。