java8 stream流 API

本文深入解析Java Stream API的各种操作,包括筛选、切片、映射、查找、匹配、规约、排序、循环及收集器等,阐述了这些操作的类型、返回值、使用场景和功能特性,帮助开发者掌握Stream API的高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

功能

方法

方法名

类型

返回类型

使用的类型/函数式接口

函数描述符

释义

筛选、切片

filter

用谓词筛选

中间

Stream<T>

Predicate<T>

T → boolean

接受一个谓词(一个返回boolean值的函数)

distinct

筛选各异元素

中间(有状态-无界)

Stream<T>

 

 

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

limit

截断流

中间(有状态-有界)

Stream<T>

long

 

返回一个不超过给定长度的流,所需的长度作为参数传递给limit

1、如果流是有序的,则最多返回前n个元素

2、如果流是无序的,比如源是set,则limit的结果不会以任何顺序排列

skip

跳过元素

中间(有状态-有界)

Stream<T>

long

 

返回一个扔掉前n个元素的流,如果流中的元素不足n个,则返回一个空流

limit(n)和skip(n)是互补的

映射

map

对流中的每一个元素应用函数

中间

Stream<R>

Function<T,R>

T→ R

map函数接受一个函数作为参数,这个函数会应用到每一个元素上,并将其映射成一个新元素

flatMap

流扁平化

中间

Stream<R>

Function<T, Stream<R>>

T → Stream<R>

将数组流合并成一个流,即扁平化

如:

List<String> words = Lists.newArrayList("hello", "world");
List<String> tmp = words.stream()
.map(word -> word.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(Collectors.toList());

查找、匹配

(终端操作、短路操作)

allMatch

 是否匹配所有

终端

boolean

Predicate<T>

T → boolean

返回boolean

anyMatch

是否至少匹配一个元素

终端

boolean

Predicate<T>

T → boolean

可以处理“流中是否有一个元素能匹配给定的谓词” 

boolean

noneMatch

与allMatch相对

终端

boolean

Predicate<T>

T → boolean

boolean

findFirst

查找第一个

终端

Optional<T>

 

 

返回流中的第一个元素,返回一个Optional,在并行上限制多,如果不关心返回的元素是哪个,可以使用findAny,findAny在并行上限制较少

findAny

匹配任意一个

终端

Optional<T>

 

 

返回当前流中的任意一个元素,返回一个Optional

isPresent():Optional包含值的时候返回true,不包含则返回false

ifPresent(Consumer<T> block):值存在的时候执行给定的代码块。Consumer函数式接口:接受一个T类型参数,并返回一个void的lambda表达式

T get():值存在时返回,不存在则抛出NoSuchElement异常

T orElse(T orther):值存在返回值,否则返回一个默认值

规约

reduce

规约

终端(有状态-有界)

Optional<T>

BinaryOperator<T>

(T,T) → T

将流中所有元素返回结合起来,得到一个值,即折叠

接受两个参数

1、一个初始值

2、一个BinaryOperation,将两个元素结合起来产生一个新值

 

重载:无初始值

 

可以和map一起组成map-reduce模式

 

实例:流中元素的个数

1、menu.stream.map(d - > 1).reduce(0, Integer::sum);

2、menu.stream.count();

排序

sorted

 

中间(有状态-无界)

Stream<T>

Comparator<T>

(T,T) → int

 

循环

forEach

 

终端

void

Consumer<T>

T → void

 

收集器

collect

 

终端

R

Collector<T,A,R>

 

 

计数

count

 

终端

long

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值