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).流是字节序列的抽象概 ...
随机推荐
- java基础16 捕获、抛出以、自定义异常和 finally 块(以及关键字:throw 、throws)
1.异常的体系 /* ------|Throwable:所有异常和错误的超类 ----------|Error(错误):错误一般用于jvm或者硬件引发的问题,所以我们一般不会通过代码去处理错误的 -- ...
- spring源码分析---IOC(1)
我们都知道spring有2个最重要的概念,IOC(控制反转)和AOP(依赖注入).今天我就分享一下spring源码的IOC. IOC的定义:直观的来说,就是由spring来负责控制对象的生命周期和对象 ...
- 用递归法计算从n个人中选选k个人组成一个委员会的不同组合数
用递归法计算从n个人中选选k个人组成一个委员会的不同组合数. 分析 由n个人里选k个人的组合数= 由n-1个人里选k个人的组合数+由n-1个人里选k-1个人的组合数: 当n = k或k = 0时,组合 ...
- Dockerfile 备份
dotnet core app FROM microsoft/dotnet:1.1.0-runtime WORKDIR /mvcApp COPY ./out . ENTRYPOINT ["d ...
- Python全栈开发之10、网络编程
网络编程就是如何在程序中实现两台计算机的通信,而两台计算机间的通信其实就是两个进程间的通信,进程间的通信主要通过socket(套接字)来描述ip地址(主机)和端口(进程)来实现的,因此我们学习网络编程 ...
- lr11 controller打开提示cannot initialize driver dll,exiting
解决:在win7要以管理员身份运行才行的 问题2:在使用loadrunner时,从vuser generator启动controller的时候可能出现:由于另一个程序正在运行中 此操作无法完成.请选择 ...
- poj2078 Matrix(DFS)
题目链接 http://poj.org/problem?id=2078 题意 输入一个n×n的矩阵,可以对矩阵的每行进行任意次的循环右移操作,行的每一次右移后,计算矩阵中每一列的和的最大值,输出这些最 ...
- 自定义mvc验证特性,手机号号段老增加,给自定义一个RegularExpress
public class PhoneExpressionAttribute: RegularExpressionAttribute, IClientValidatable { public Phone ...
- 用php写的一个猜数字的程序
写一个php的猜数字的小程序,提高自己对php的熟悉程度. <?php $count=rand(0,100); $number = (isset($_POST['number'])) ? $_P ...
- Python数据类型-列表(list)增删改查
1.添加元素 添加单个元素:使用append(object)函数可以为列表添加单个元素,参数object为对象:也就是说所有Python的对象都可以添加到列表中. 添加多个元素(合并列表):使用ext ...