Stream 的使用,我觉得使用它是非常方便的~

前言

今天主要聊起的是如何使用 stream 流,关于它为什么被引入,有什么样的优势,还有一些平时未曾注意到的知识点的话,就在下一次再讲吧~

能基础的使用,是深入了解它的一个基础吧,我觉得~

在本文中,你将会看到Stream API支持的许多操作。这些操作能让你快速完成复杂的数据查询,如筛选、切片、映射、查找、匹配和归约。

一、筛选和切片

1.1、筛选 filter

filter 会接受一个 Predicate 接口的参数,其本质就是一个布尔值函数(官方称为谓词,说成白话,即为一个布尔值函数)

准备好的数据~

      static   List<Student> students = new ArrayList<>();
 ​
     static {
                students.add(new Student("学生A", "大学1", 18));
         students.add(new Student("学生A", "大学1", 18));
         students.add(new Student("学生A", "大学1", 18));
         students.add(new Student("学生A", "大学1", 18));
         students.add(new Student("学生B", "大学1", 18));
         students.add(new Student("学生C", "大学1", 19));
         students.add(new Student("学生D", "大学2", 20));
         students.add(new Student("学生E", "大学2", 21));
         students.add(new Student("学生F", "大学2", 20));
         students.add(new Student("学生G", "大学3", 22));
         students.add(new Student("学生H", "大学3", 23));
         students.add(new Student("学生I", "大学3", 19));
         students.add(new Student("学生J", "大学4", 20));
     }

1、从中筛选出小于20的学生们组成一个新的集合

jdk 8 之前的写法:

 List<Student> result = new ArrayList<>();
 for (Student student : students) {
     if (student.getAge() < 20) {
         result.add(student);
     }
 }

Jdk 8 及之后的写法:使用stream流操作

 /**
      * 选出小于20的学生组成一个集合
      *
      * @param students
      */
 private static List<Student> selectAgeLt18(List<Student> students) {
     // 最基础的写法, filter的参数是一个 Predicate,而它是一个FunctionalInterface 式的接口, 唯一的接口就是表示一个参数的谓词(布尔值函数)。
     //        List<Student> list = students.stream().filter(new Predicate<Student>() {
     //            @Override
     //            public boolean test(Student student) {
     //                return student.getAge()<20;
     //            }
     //        }).collect(Collectors.toList());
     // 因此可以简化写成 以下这种写法
     //        List<Student> list = students.stream().filter(student -> {
     //            return student.getAge() < 20;
     //        }).collect(Collectors.toList());
     //又因为filter 的参数实际上是一个lambda表达式,当只有一条返回语句时,又可以省略大括号和return
     List<Student> list = students.stream().filter(student -> student.getAge() < 20).collect(Collectors.toList());
     return list;
 }

1.2、去重 distinct

distinct()它会返回一个元素各异(根据流所生成元素的 hashCode和equals方法实现)的流。

jdk 8之前对集合的一些去重方式

 /**
      * 去重操作ÿ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值