【JavaSE】StreamAPI

1.Stream简介

  • 集合更多的是数据结构的封装,主要用来存储数据。如果需要对数据进行多次加工(比如:筛选、排序、聚合等),可以使用Stream APl
  • Stream 将要处理的元素集合看作是一种流,在流的过程中,借助Stream APl对流中的元素进行操作整个流操作就是一条流水线,将元素放在流水线上一个个地进行处理。
  • Stream实质上是对集合对象功能的增加,用来进行各种方便高效的操作。过程就像工人在流线上加工一样。我们只需要告诉流你的要求,流便全在背后自行根据要求元素进行处理,而我们只需要得到最后的结果就可以了。

2.Stream创建

  • 通过Collection接口的stream()方法使用集合创建流
  • 使用Arrays.stream(T[] array)方法使用数组创建流
  • 使用StreamAPl中的静态方法来创建流
  • Files类的方法来创建流
  • 合并流

3.Stream分类

  • 中间操作:每次操作返回一个新的流,可以有多个
  • 终端操作:每个流只能进行一次终端操作,终端操作结束后,流无法再次使用。终端操作会产生一个新的值或集合。

4.Stream特性

  • 不存储数据,按照给定的规则,对数据进行加工计算,一般会输出结果或得到一个新的集合
  • 不会改变数据源。通常情况下会产生一个新的集合或一个值
  • 具有延迟执行特性。只有调用终端操作时,中间操作才会执行。

5.Stream和集合的差别

5.1什么时候进行计算

  • 集合框架,里面包含当前数据结构中所有的值,我们可以对集合进行增加、删除、修改、检索数据的操作,集合中的元素都是已经计算好的。
  • 流是按需计算,是在用户要求的时候才会计算值

5.2外部迭代和内部迭代

  • 集合使用外部迭代方式
  • Stream使用内部迭代方式

6.Optional类

6.1简介

  • java8版本引入的一个新的容器类,可以代表一个值存在或不存在,不用返回容易出问题的NullPointerException
  • Optional类可以含有对象,也可以为空

6.2常用方法

  • empty():创建一个空的Optional
  • of(T t):创建一个Optional,存储T对象,非空值,如果元素为空,报空指针异常,如果明确对象不为null,使用of()方法
  • ofNullable(T t):创建一个Optional,存储T对象,可以有空值,如果元素为空,报NoSuchElementException异常,对象可能是nul,也可能非null
  • get():获取Optional中的value值
  • isPresent():判断值是否存在,存在返回true,否则返回falseisEmpty():判断值是否存在,不存在返回true,否则返回false,在jdk11及以上版本使用
  • orElse(T t): 如果值不为空,则返回值,否则返回给定默认值
  • orElseGet(supplier):如果值不为空,则返回值,否则,会执行作为参数传入的supplier接口,并将返回执行结果

6.3总结Optional

6.3.1解决什么问题

  • 解决java系统中出现的空指针异常的情况,简化ifelse对于对象是否为空的判断

6.3.2不能解决的问题

  • 不能避免所有空指针异常

6.3.3什么时候使用Optional

  • 主要用途作为返回类型。获取返回类型的实例后,可以提取里面的值(在有值的情况下),也可以提供其他操作(没有值)
  • 和StreamAPI相结合使用

6.4什么时候不能使用

  • 不要将其用在类中的字段类型,Optiona不能序列化
  • 不要将其用在构造函数和方法的参数上。

7.流的操作

7.1 遍历/匹配/查找

  • foreach:遍历操作
  • findFirst:查找第一个数据,返回Optional
  • findAny: 查找任意元素,返回0ptional,如果是stream,返回第一个元素,相当于findFirst,如果使用的是parallelStream,返回随机一个元素
  • anyMatch:只要有一个元素符合判断条件,则返回true,否则返回falsenoneMatch:每个元素都不符合判断条件,则返回true,否则返回falseallMatch:每个元素都符合判断条件,则返回true,否则返回false

7.2 过滤与切片

  • 属于中间操作

7.2.1 过滤

  • 过滤:也称作筛选,是按照一定的规则校验流中的元素,将所有符合条件的元素提取到一个新的流中的操作。

7.2.2 切片

切片:从集合中取出一部分相应的元素重新组成一个集合

  • 将集合截断: limit(long maxSize)操作,截断流,最大长度不超过maxSize
  • 在集合中跳过指定元素:skip(long n)操作,跳过前面元素,从第n个元素获取
  • 去重:distinct()操作,根据equals和hashcode方法进行比较,是否重复

7.3 聚合操作

属于终端操作

  • 取最大值           max(new Comparator< T>)
  • 取最小值           min (new Comparator< T>)
  • 统计个数           count()

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值