1、介绍步骤还是结合例子来说明更容易理解一点,首先创建个List集合对象实例,添加4个用来测试的学生实例List<Stude荏鱿胫协nt> students = new ArrayList<Student>();students.add(new Student("Tom", 12, "male", 5));students.add(new Student("Lili", 11, "female", 4));students.add(new Student("John", 8, "male", 1));students.add(new Student("Lucy", 10, "female", 3));System.out.println("所有学生:");students.forEach((p) -> System.out.printf("%s;", p.getName()));先运行下,打印出所有学生名字

2、filter的捂执涡扔使用例子,filter对stream按照一定的条件进行过滤,生成一个新的stream本例中,按照学生年龄进行过滤,过滤年龄大于10岁的学生System.out.println(&鳎溻趄酃quot;下面是年龄大于10岁,年级大于4的学生:");students.stream() .filter((p) -> (p.getAge() > 10)) .filter((p) -> (p.getGrade() > 4)) .forEach((p) -> System.out.printf("%s;", p.getName()));System.out.println();运行结果如下,打印出大于10岁,年级大于4的是Tom

3、limit/skip,limit返回前n个元素,skip则是跳过前n个元素System.out.println("梓脶阗擗最前面2个学生:");students.stream() .limit(2) .forEach((p) -> System.out.printf("%s;", p.getName()));System.out.println();System.out.println("跳过前面2个学生:");students.stream() .skip(2) .forEach((p) -> System.out.printf("%s;", p.getName()));System.out.println();运行结果如下:

4、max/min,max可以取年龄或者年级最大的元素,min可以取年龄或者年级最小的元素System.out.println("年龄最大的学生:");System.out.println(students.stream() .max((p1, p2) -> (p1.getAge() - p2.getAge())) .get().getName());System.out.println("年龄最小的学生:");System.out.println(students.stream() .min((p1, p2) -> (p1.getAge() - p2.getAge())) .get().getName());

5、parallel并行模式,对于大数据量非常有用,mapToInt作用是把学生的年龄映射成int的stream,sum是计算总和System.out.println("所有学生年龄总和:");System.out.println(students.stream().parallel().mapToInt(Student::getAge).sum());运行结果如下,年龄总和为41

6、数值流的构造System.out.println("数据流的构造:");IntStream.of(new int[]{1, 2, 3}).forEach(System.out::println);IntStream.range(1, 3).forEach(System.out::println);IntStream.rangeClosed(1, 3).forEach(System.out::println);rangeClosed从打印结果可以看出,是闭区间范围

7、流转换为其它数据结构,有兴趣的可以参考下面的例子测试下结果
