【Java 8】Stream API

Stream API概述

定义

Stream API提供了一种高效且易于使用的处理数据的方式,让我们可以像使用SQL数据库查询一样操作集合数据。

位置

使用

Stream的使用主要分三步,每一步都有相应的API支持。

创建stream:从数据源(如集合、数组等)获取一个流。

中间操作:对数据一连串处理,每次处理后结果仍为一个流。

终止操作:执行中间操作链,并产生最终结果。

常用Stream API

创建操作

通过Collection接口中的默认方法获取流

获取集合元素组成的串行流

获取集合元素组成的并行流

通过Arrays类中的静态方法stream获取流

获取类类型数组元素组成的流

获取int型数组元素组成的流

获取long型数组元素组成的流

获取double型数组元素组成的流

通过Stream类中的静态方法获取流

通过同类型的可变参数获取流

通过指定种子元素和迭代器生成无限流

通过供给器产生无限流

将两个流拼接成一个流

中间操作

筛选

虑去流中不满足断言器的元素

去掉流中重复的元素,依据为元素类型的hashCode和equals方法

只取流中前n个元素,若流中元素不足n个则取全部

只取流中前n个元素以后的元素,若流中元素不足n个则不取

映射

将流中每个元素映射为一个新值

将流中元素映射为一个int型数值

将流中元素映射为一个long型数值

将流中元素映射为一个double型数值

将流中元素都映射为一个流类型元素,在把所有流连接成一个流

排序

将流中元素按自然顺序排序,要求元素实现Comparable接口

将流中元素按指定比较器排序

终止操作

查找

获取流中第一个元素

获取流中任意一个元素,并行流才有随机性

去取流中元素的个数

获取流中最大的元素

返回流中最小的元素

匹配

检查是否匹配所有元素

检查是否至少匹配一个元素

检查是否没有一个元素匹配

迭代

对流中的元素执行内部迭代

归约

将流中元素反复结合,并提供一个起始元素

将流中元素反复结合,不提供起始元素

收集

通过指定供给器、累加器和结合器收集流中的元素

通过指定收集器收集流中的元素

泛型类型说明:

T:输入类型

A:中间类型

R:结果类型

JDK内置的收集器:

Stream串行与并行

串行流与并行流的切换

获取等价的并行流,可能本身已是并行流

获取等价的顺序流,可能本身已是串行流

并行流

Fork/Join框架工作原理

将一个大任务,拆分(fork)为若干小任务,直到不可拆分为止。然好在对小任务的执行结果进行合并(join),得到最终结果。

Java 7 ForkJoinPool

为了支持Fork/Join操作,Java 7中加入了ForkJoinPool。该线程池采用“工作窃取”模式,可以更大限度地发挥多CPU或多CPU内核的优势,对于CPU密集型任务尤为重要。

并行流的原理

Java 8中的并行流,其底层实现是基于ForkJoinPool的,并且使用一个共享的ForkJoinPool,通过ForkJoinPool.commonPool()可以获取该线程池的引用。并行流的出现,让原本性能出色但使用起来不太友好的Fork/Join操作变得更加好用

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181130G1NOND00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券