二、流

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 流操作的更多相关文章

  1. 好记性-烂笔头:JDK8流操作

    1):对象 List<User> 转 Map<String,Object> 案例如下: public class User { private Integer id; priv ...

  2. JDK8 Steam流操作

    原文:https://github.com/niumoo/jdk-feature/blob/master/src/main/java/net/codingme/feature/jdk8/Jdk8Str ...

  3. 【java多线程】java8的流操作api和fork/join框架

    原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...

  4. 还看不懂同事的代码?超强的 Stream 流操作姿势还不学习一下

    Java 8 新特性系列文章索引. Jdk14都要出了,还不能使用 Optional优雅的处理空指针? Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下? 还看不懂同事的代码?Lambda ...

  5. 超强的Lambda Stream流操作

    原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...

  6. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

  7. [WCF编程]10.操作:流操作

    一.流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞. 对于数据量小的消息,这种交换模式 ...

  8. io流操作大全

    JAVA 中的IO流 一.流的概念        流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部 ...

  9. Stream 流操作

     Stream 类 先看下面的图 Stream 是所有流的抽象基类(不能被实例化,需要使用他的派生类FileStream/MemoryStream/BufferedStream).流是字节序列的抽象概 ...

随机推荐

  1. 以太坊go-ethereum客户端JSON-RPC API调用(一)

    前几篇博客主要介绍了go-ethereum客户端不同环境的搭建,今天这篇博客是建立在前几排博客的基础上.当搭建完成之后,我们可以通过各种方式与节点进行交互(JavaScript Console.JSO ...

  2. django rest_framework中将json输出字符强制为utf-8编码

    最近在和日本外包合作开发JIRA对接发布系统的版本单时, 遇到这个问题. 就是我们这边的输出浏览器显示为中文,而到了JIRA端就出现乱码. 查了文档,原来django rest_framework的默 ...

  3. 关于Web2.0概念的一篇小短文

    Web2.0程序设计的第一篇作业,写了就顺手放上来吧. 在互联网泡沫破裂数年后,Tim O'Reilly与John Battelle总结了互联网产业复兴过程中出现的一系列现象,在2004年举办的第一届 ...

  4. ul>li中自定义属性后取值的问题

    动态赋值的li: $.ajax({ type: "POST", url: "${base}/before/subDemand/listType", succes ...

  5. jquery.autocomplete修改 实现键盘上下键 自动填充

    根据需求要实现通过键盘上下移动,获得联想菜单中的值,如同google baidu的查询功能. 在网上找了很久没有找到可以实现该功能的插件,无奈只能自己动手改代码.找到js中的KEY.DOWN 和 KE ...

  6. Wannafly挑战赛7 B - codeJan与旅行

    题目描述 codeJan 非常喜欢旅行.现在有 n 个城市排在一条线上,并且 codeJan 的位置不和任何一个城市的位置重叠.codeJan 想要游览 m 个城市,同时因为时间是不断变化的,游览一个 ...

  7. Python网络管理模块Paramiko-代码实例

    import paramiko import time import sys ip = "10.1.1.1" username = "Admin" passwo ...

  8. JavaScript三种数据类型之间的互转

    一:number<===>string  数字类型和字符串类型之间的互相转换 number===>string 数字转字符串有三种方式: 1.在数字后面 +“ ”; 2.利用字符串的 ...

  9. 【JAVAWEB学习笔记】30_WEB总结_思维导图

    可以在浏览器放大来查看细节,或者另存为图片到本地电脑查看.

  10. http request GET 乱码分析

    提交一个GET请求 在浏览器地址栏或搜索框输入地址:http://www.baidu.com/content/衣服?keyword=衬衣 其中的中文会被浏览器进行编码,具体编码情况请参考阮大神:关于U ...