JDK8-java.util.stream

Stream作用就是在不改变源集合、数组条件下,对其中元素进行一顿操作得到想要的数据。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
以下的Stream接口中方法其平行接口(红方框中的其他stream)均存在。

Stream创建方式

在这里插入图片描述

Stream中间操作

惰性求值:只有存在Stream终止操作时,才会执行中间操作
可能为空的则用Optional< T >接受

筛选与切片

在这里插入图片描述
注:下图中employees是个List

Stream filter(Predicate<? super T> predicate)

以某种条件过滤掉部分元素:
在这里插入图片描述

Stream limit(long maxSize)

取前maxSize个元素:
在这里插入图片描述

Stream skip(long n)

跳过前n个元素
在这里插入图片描述

Stream distinct()

去重注意是用元素的HashCode和equals方法去重的
在这里插入图片描述

映射

在这里插入图片描述

map(Function< T > mapper)【很重要】

返回对每个元素进行Function后转换为一种新元素形成的流:
在这里插入图片描述

flatMap(mapper)

类似于addAll,将每个元素变成的流的每个元素依次放入一个新流中。(并不是把每个元素变成的流直接放入新流中)
在这里插入图片描述

排序

在这里插入图片描述

查找与匹配

在这里插入图片描述

allMatch、anyMatch、noneMatch都是(Predicate<? super T> predicate)

Optional< T > findFirst()

在这里插入图片描述

Optional< T > findAny()在这里插入图片描述

long count()

返回流中元素个数

Optional max(Comparator<? super T> comparator)

Optional min(Comparator<? super T> comparator)

要有比较才能知道大小嘛
在这里插入图片描述

归约 reduce()

在这里插入图片描述

收集 collect()终端操作

注意:

  1. Collector是java.util.stream下专门为stream提供的,与Collection没关系
  2. Collector方法都由工具类Collectors实现,所以直接用工具类Collectors中的方法

Collectors常用方法

对流中元素的部分属性的操作

一、返回集合

Object[] toArray()返回数组
在这里插入图片描述

二、平均、求和等基本操作

在这里插入图片描述
另一种方式: (对于集合元素中一特定属性)
在这里插入图片描述

三、分组(全都返回Map)

在这里插入图片描述

四、拼接

在这里插入图片描述

对数字操作流DoubleStream、IntStream、LongStream

常常 mapTo数据类型 将集合中的数字映射成 数字stream:
求和、平均、最大、最小等操作

/**
*  计算红色widgets的质量总和
**/
 long sum = widgets.stream()
                   .filter(w -> w.getColor() == RED)
                   .mapToLong(w -> w.getWeight())//将Stream转换为LongStream
                   .parallel()
                   .sum();

并行流与顺序流(并行流就是Fork/Join框架)

顺序流就是单线程处理stream流
并行流是将stream流中数据划分成多个数据块处理(即划分成多个小的stream流),每个数据块将拥有一个线程 (底层就是Fork/Join框架)

parallel()方法: 将顺序流转换为并行流
sequential()方法: 将并行流转换为顺序流

计算0~1000亿的累加和:(CPU利用率高达100%)
在这里插入图片描述

java.util.Optional 防止空指针异常

在这里插入图片描述
用法:(防止new NewMan().getGodness().getName()可能发生空指针异常,可以用orElse(T t)判断一下)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值