二、流

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. centos6.5 安装、启动vnc

    一.安装vnc 1.确保当前账号是root2.查看本机是否已经安装vncserver rpm -qa|grep tigervnc 3.安装vncserver yum -y install tigerv ...

  2. Delphi根据字符串实例化对象

    我们可以通过ClassRegistry单元的TClassRegistry类很轻松的根据字符串创建出对象. 下面是该类几个主要函数的说明: // 获取TClassRegistry自身的单例引用class ...

  3. Django admin后台操作

    Django提供自动后台管理应用,简称admin. admin是一个应用,每个Web站点都需要它.admin通过让开发者可以在完成完整的UI之前验证处理数据的代码. 设置admin 打开setting ...

  4. SAM-Toy Cars题解

    题目描述 Jasio 是一个三岁的小男孩,他最喜欢玩玩具了,他有n 个不同的玩具,它们都被放在了很高的架子上所以Jasio 拿不到它们. 为了让他的房间有足够的空间,在任何时刻地板上都不会有超过k 个 ...

  5. 转:在 Ubuntu 上使用 Nginx 部署 Flask 应用

    转:http://Python.jobbole.com/84286/ 原文出处: Vladik   译文出处:开源中国    我职业生涯的大部分都在使用微软的架构,最近我决定走出技术的舒适区,步入开源 ...

  6. CodeForces 811C Vladik and Memorable Trip

    $dp$. 记录$dp[i]$表示以位置$i$为结尾的最大值. 枚举最后一段是哪一段,假设为$[j,i]$,那么可以用$max(dp[1]...dp[j-1]) + val[j][i]$去更新$dp[ ...

  7. Python之路【第四篇】: 函数、递归、内置函数

    一. 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码 while True: i ...

  8. Blob和Clob在JDBC中的简介

    数据库在当今的应用越来越广泛了,同样伴随着领域的广泛,存储的内容也不在是只有数值.字符.boolean几种类型,而是越来越多样化.在这样的前提下就出现了Blob和Clob两个类型.下面我将对这个两个类 ...

  9. Bzoj2038/洛谷P1494 小Z的袜子(莫队)

    题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...

  10. JS延迟执行

    <!DOCTYPE html> <html> <head> <title></title> <script type="te ...