java 新特性之 stream 流

  • Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
  • 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
  • 元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

stream of elements -----> filter -----> sorted------> map-----> collect

上述流程翻译成代码为:

 List<T> list =  new ArrayList<T>List<T> resultList = list.stream().filter(b -> b.getInfor() != null).sorted(b -> b.getCollector()).map().collect(Collectors.toList());

1. stream

list.stream 就是将 list 集合转化成 stream 流。

2. filter

filter 为过滤集合为空的数据(filter 过滤的结果与正常思维相反,filter(b -> b.getInfor() != null) 这样的写法为过滤掉为null的数据)

我更好的理解为筛选,根据筛选条件来筛选所需数据;如下面的例子中,筛选出集合为空的数据,并统计个数

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List<String> lisString = strings.stream().filter(string -> string.isEmpty()).count();过滤之后的结果为:2

过滤掉空字符串和null,筛选出有效数据

List<String> lisString = strings.stream().filter(t -> !"".equals(t)).collect(Collectors.toList());

3. sorted

sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

4.map

map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

distinct() 为去除掉重复的元素。

5. 并行(parallel)程序

parallelStream 是流并行处理程序的代替方法。以下实例我们使用 parallelStream 来输出空字符串的数量:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();

java 新特性之 stream 流相关推荐

  1. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局

    转载自   跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...

  2. 跟我学 Java 8 新特性之 Stream 流(六)收集

    转载自   跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...

  3. 跟我学 Java 8 新特性之 Stream 流基础体验

    转载自   跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章, ...

  4. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

  5. 跟我学 Java 8 新特性之 Stream 流(三)缩减操作

    转载自   跟我学 Java 8 新特性之 Stream 流(三)缩减操作 和前面两篇文章一起服用,效果会更佳.通过对流API的基础体验Demo和关键知识点的讲解,相信大家对流API都有一定的认识了, ...

  6. 跟我学 Java 8 新特性之 Stream 流(四)并行流

    转载自   跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...

  7. 跟我学 Java 8 新特性之 Stream 流(五)映射

    转载自   跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...

  8. 使用Java8新特性(stream流、Lambda表达式)实现多个List 的笛卡尔乘积 返回需要的List<JavaBean>

    需求分析: 有两个Long类型的集合 : List<Long> tagsIds; List<Long> attributesIds; 现在需要将这两个Long类型的集合进行组合 ...

  9. java stream byte_乐字节-Java8新特性之Stream流(上)

    上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...

最新文章

  1. mysql允许用户远程连接_mysql允许用户远程连接
  2. 负载均衡策略_负载均衡策略
  3. 我的2015:创业年终总结
  4. node sqlite 插入数据_使用 Sequelize 操作 Sqlite3 数据库
  5. 性能测试入门(二)转:JMeter基础之一 一个简单的性能测试
  6. readyread信号不触发_触发器型PFD与传统型PFD性能仿真对比
  7. 四舍五入_从四舍五入谈起
  8. mysql二级缓存,mybatis的动态sql和二级缓存
  9. cross_val_score 如何对孤立森林_【收藏】森林防火手抄报素材汇总!
  10. Python数模笔记-模拟退火算法(2)约束条件的处理
  11. Linux后台执行命令
  12. 使用Bootstrap后,关于IE与Chrome显示字体的问题
  13. 通过多组的HSRP实现网络的冗余和负载
  14. django 1.8 官方文档翻译:13-6 分页
  15. python列表元祖字典集合运算_Python基础5:列表 元祖 字典 集合 Json
  16. 开发一个Java项目的完整流程(附2600套Java项目源码+视频)
  17. 基于Python的校园学生一卡通管理系统
  18. ORK FrameWork - 自定义存储数据ISaveData接口
  19. ds90ub934 i2c 配置_DS90UB934-Q1 FPD-Link III 解串器 摄像头、环视系统应用
  20. 关于Error:Execution failed for task ':app:transformClassesWithDexForDebug'的解决方法

热门文章

  1. layui获取input信息_python爬虫—用selenium爬取京东商品信息
  2. java日期算前一天_java 根据系统日期获取前一天、后一天时间(根据初始日期推算出期望(向前/向后)日期)...
  3. java增删改查_只会增删改查的Java程序员该如何发展
  4. 以后可得记住了--Python笔试面试题小结
  5. LuoguP1131 [ZJOI2007]时态同步
  6. 5分钟速成C++14多线程编程
  7. 根据压缩后的行列数和sourcemap反向定位源码
  8. 正则表达式基础知识,持续更新…
  9. [PYTHON] 深度解析copy.copy() 与 copy.deepcopy()
  10. windows 远程连接debian_UOS统一操作系统远程协助软件TeamViewer