Java8——Stream流的操作

Stream API定义了许多流的操作,它们大概可以分为两类:1.中间操作:2.终端操作。

Stream API定义了许多流的操作,它们大概可以分为两类:

  1. 中间操作:
    1. 中间操作的一个显著特征是会返回另一个Stream流,比如filter、sorted、linit等等,这样的好处是我们可以进行链式编程,形成一个操作流水线!
    2. 中间操作的另一个隐藏特征是延迟执行,或者称为惰性求值!因为他只是描述了流水线要进行的操作,而并没有真正的执行这条流水线,它需要一个“触发操作”,这就是终端操作!
  2. 终端操作:
    1. 终端操作的一个显著特征是不会返回另一个Stream流,比如count、collect,相当于从流水线中获取结果,只有存在终端操作,中间操作才会执行。
    2. 终端操作的另一个隐藏特征是它会终结这个流,此后这个流不能被重复使用,也被称为及早求值!

案例演示:

@Test
public void test() {
    //学生集合,学生有age-年龄 ,name-名字,score-分数,三个属性
    List<Student> students = new ArrayList<>();
    students.add(new Student(10, 55, "小花"));
    students.add(new Student(13, 100, "小华"));
    students.add(new Student(9, 85, "晓华"));
    students.add(new Student(8, 70, "肖华"));


    //没有终端操作的流,不会执行中间操作
    students.stream()
            //筛选出成绩大于等于60的学生
            .filter(student -> {
                System.out.println("中间操作" + student.getScore());
                return student.getScore() >= 60;
            })
            //收集学生名字
            .map(Student::getName);


    //有终端操作的流,才会执行
    //没有终端操作的流,不会执行中间操作
    students.stream()
            //筛选出成绩大于等于60的学生
            .filter(student -> {
                System.out.println("终端操作" + student.getScore());
                return student.getScore() >= 60;
            })
            //收集学生名字
            .map(Student::getName)
            //collect是一个终端操作
            .collect(toList());

}

  • 发表于 2020-09-16 15:43
  • 阅读 ( 25 )

0 条评论

请先 登录 后评论
NX小编
NX小编

1209 篇文章

作家榜 »

  1. NX小编 1209 文章
  2. 58沈剑 309 文章
  3. 奈学教育 137 文章
  4. 李希沅 | 奈学教育 36 文章
  5. 江帅帅 | 奈学教育 29 文章
  6. 林淮川 | 奈学教育 12 文章
  7. 科技热点 10 文章
  8. 邱鹏超 2 文章