用到的对象:
package com.zwq;
import lombok.Data;
/**
* @author zhangwq
*/
@Data
public class Student {
private int id;
private String name;
private String clazz;
private Integer age;
private Integer grade;
public Student(String name, String clazz) {
this.name = name;
this.clazz = clazz;
}
public Student() {
}
public Student(int id, String name, String clazz, int age, Integer grade) {
this.id = id;
this.name = name;
this.clazz = clazz;
this.age = age;
this.grade = grade;
}
}
集合讲的是数据,流讲的是计算
* ①Stream 自己不会存储元素。
* ②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
* ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
@Test
//创建
public void test(){
List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
System.out.println(stream.count());
//创建流、中间过程、终止
//生成无限流
Stream.generate(()->(int)(Math.random()*100)).limit(10).forEach(System.out::println);
//迭代生成无限流
Stream.iterate(0,e->e+2).limit(5)
.forEach(System.out::println);
}
@Test
//筛选
public void test2(){
List<Student> students = Arrays.asList(
new Student(1,"zhangsan","class1",18,60),
new Student(2,"lisi","class1",18,59),
new Student(3,"wangwu","class2",18,100),
new Student(3,"wangwu","class2",18,100),
new Student(3,"wangwu","class2",18,100),
new Student(14,"zhaoliu","class2",18,80));
//filter(Predicate p) 接收 Lambda , 从流中排除某些元素。
//distinct() 筛选,通过流所生成元素的 hashCode() 和 equals() 去
//除重复元素
//limit(long maxSize) 截断流,使其元素不超过给定数量。
//skip(long n) 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素
//不足 n 个,则返回一个空流。与 limit(n) 互补
Stream<Student> studentStream = students.stream().filter(e->e.getGrade()>=60).distinct().limit(3).skip(2);
studentStream .forEach(System.out::println);
}