jdk8 流操作
二、流
2.1 流介绍
流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了!
2.2 使用流
| 类别 | 方法名 | 方法签名 | 作用 |
|---|---|---|---|
| 筛选切片 | filter | Stream<T> filter(Predicate<? super T> predicate) | 过滤操作,根据Predicate判断结果保留为真的数据,返回结果仍然是流 |
| distinct | Stream<T> distinct() | 去重操作,筛选出不重复的结果,返回结果仍然是流 | |
| limit | Stream<T> limit(long maxSize) | 截取限制操作,只取前 maxSize条数据,返回结果仍然是流 | |
| skip | Stream<T> skip(long n) | 跳过操作,跳过n条数据,取后面的数据,返回结果仍然是流 | |
| 映射 | map | <R> Stream<R> map(Function<? super T, ? extends R> mapper) | 转化操作,根据参数T,转化成R类型,返回结果仍然是流 |
| flatMap | <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) | 转化操作,根据参数T,转化成R类型流,这里会生成多个R类型流,返回结果仍然是流 | |
| 匹配 | anyMatch | boolean anyMatch(Predicate<? super T> predicate) | 判断是否有一条匹配,根据Predicate判断结果中是否有一条匹配成功 |
| allMatch | boolean allMatch(Predicate<? super T> predicate) | 判断是否全都匹配,根据Predicate判断结果中是否全部匹配成功 | |
| noneMatch | boolean noneMatch(Predicate<? super T> predicate) | 判断是否一条都不匹配,根据Predicate判断结果中是否所有的都不匹配 | |
| 查找 | findAny | Optional<T> findAny() | 查找操作, 查询当前流中的任意元素并返回Optional |
| findFirst | Optional<T> findFirst() | 查找操作, 查询当前流中的第一个元素并返回Optional | |
| 归约 | reduce | T reduce(T identity, BinaryOperator<T> accumulator); | 归约操作,同样两个类型的数据进行操作后返回相同类型的结果。比如两个整数相加、相乘等。 |
| max | Optional<T> max(Comparator<? super T> comparator) | 求最大值,根据Comparator计算的比较结果得到最大值 | |
| min | Optional<T> min(Comparator<? super T> comparator) | 求最小值,根据Comparator计算的比较结果得到最小值 | |
| 汇总统计 | collect | <R, A> R collect(Collector<? super T, A, R> collector) | 汇总操作,汇总对应的处理结果。这里经常与 |
| count | long count() | 统计流中数据数量 | |
| 遍历 | foreach | void forEach(Consumer<? super T> action) | 遍历操作,遍历执行Consumer 对应的操作 |
上面是Stream API的一些常用操作,按场景结合lambda表达式调用对应方法即可。至于Stream的生成方式,Stream的of方法或者Collection接口实现类的stream方法都可以获得对应的流对象,再进一步根据需要做对应处理。
另外上述方法如果返回是Stream对象时是可以链式调用的,这个时候这个操作只是声明或者配方,不产生新的集合,这种类型的方法是惰性求值方法;有些方法返回结果非Stream类型,则是及早求值方法。
jdk8 流操作的更多相关文章
- 好记性-烂笔头:JDK8流操作
1):对象 List<User> 转 Map<String,Object> 案例如下: public class User { private Integer id; priv ...
- JDK8 Steam流操作
原文:https://github.com/niumoo/jdk-feature/blob/master/src/main/java/net/codingme/feature/jdk8/Jdk8Str ...
- 【java多线程】java8的流操作api和fork/join框架
原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...
- 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下
Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...
- 超强的Lambda Stream流操作
原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...
- Node学习笔记(一):stream流操作
NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...
- [WCF编程]10.操作:流操作
一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...
- io流操作大全
JAVA 中的IO流 一.流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部 ...
- Stream 流操作
Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...
随机推荐
- C# Winform频繁刷新导致界面闪烁解决方法
C#Winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将 ...
- 网页转图片,html生成图片,网页生成图片(基于linnux+phantomjs)和wkhtmltoimage
安装扩展: (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git 安装casperjs cd / git clone git://githu ...
- plsql实例精讲部分笔记
转换sql: create or replace view v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,mo ...
- js获取系统时间
//------------------------------------获取系统日期时间 var oDate=new Date(); //alert(oDate.getFullYear());// ...
- Visual Studio 中如何同时注释多行和取消注释多行
注释多行:先按 Ctrl - K 组合键,再按 Ctrl - C 组合键 取消注释多行:先按 Ctrl - K 组合键,再按 Ctrl - U 组合键
- SaltStack的配置管理--jinja (七)
SaltStack的配置管理--jinja 需求场景:使用jinja模板,让各节点的httpd都监听在本机的ip [root@7mini-node1 apache]# vim files/httpd. ...
- email 校验
email 校验: javascript: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/ java: ^([a- ...
- ref:PHP反序列化漏洞成因及漏洞挖掘技巧与案例
ref:https://www.anquanke.com/post/id/84922 PHP反序列化漏洞成因及漏洞挖掘技巧与案例 一.序列化和反序列化 序列化和反序列化的目的是使得程序间传输对象会更加 ...
- 【51Nod 1815】【算法马拉松 23】调查任务
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1815 tarjan缩点后在DAG上递推即可. 每个点维护所有根到它的路径 ...
- git提交时”warning: LF will be replaced by CRLF“提示
今天把项目做完之后,然后用Git准备提交代码的时候,遇到warning: LF will be replaced by CRLF警告. 当时在网上查了资料,发现很多的解决办法都是:修改git全局配置, ...