1.Collectors.toList():转换成List集合。/Collectors.toSet():转换成set集合。

System.out.println(Stream.of("a", "b", "c","a").collect(Collectors.toSet()));

2.Collectors.toCollection(TreeSet::new):转换成特定的set集合。

TreeSet treeSet = Stream.of("a", "c", "b", "a").collect(Collectors.toCollection(TreeSet::new));

System.out.println(treeSet);

3.Collectors.toMap(keyMapper, valueMapper, mergeFunction):转换成map。

Map collect = Stream.of("a", "b", "c", "a").collect(Collectors.toMap(x -> x, x -> x + x,(oldVal, newVal) -> newVal)));

collect.forEach((k,v)

-> System.out.println(k + ":" + v));

补充

关于合并函数BinaryOperator mergeFunction对象

当toMap中没有用合并函数时,出现key重复时,会抛出异常 :  Exception in thread "main" java.lang.IllegalStateException: Duplicate key aa

当使用合并函数时,可通过Labmda表达式,对重复值进行处理

4.Collectors.minBy(Integer::compare):求最小值,相对应的当然也有maxBy方法。

5.Collectors.averagingInt(x->x):求平均值,同时也有averagingDouble、averagingLong方法。

6.Collectors.summingInt(x -> x)):求和。

7.Collectors.summarizingDouble(x -> x):可以获取最大值、最小值、平均值、总和值、总数。

DoubleSummaryStatistics summaryStatistics = Stream.of(1, 3, 4).collect(Collectors.summarizingDouble(x -> x));

System.out.println(summaryStatistics .getAverage());

8.Collectors.groupingBy(x -> x):有三种方法,查看源码可以知道前两个方法最终调用第三个方法,

第二个参数默认HashMap::new第三个参数默认Collectors.toList()

Map> map = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity()));System.out.println(map);

Map

map1 = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(x ->x)));System.out.println(map1);

HashMap

> hashMap = Stream.of(1, 3, 3, 2).collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.mapping(x -> x + 1, Collectors.toList())));

System.out.println(hashMap);

补充: identity()是Function类的静态方法,和 x->x 是一个意思,

当仅仅需要自己返回自己时,使用

identity()能更清楚的表达作者的意思.

写的复杂一点,绕一点,对理解很有好处.下边是运行结果:

9.Collectors.partitioningBy(x -> x > 2),把数据分成两部分,key为ture/false。第一个方法也是调用第二个方法,第二个参数默认为Collectors.toList()

Map> map = Stream.of(1, 3, 3, 2).collect(Collectors.partitioningBy(x -> x > 2));

Map longMap = Stream.of(1, 3, 3, 2).collect(Collectors.partitioningBy(x -> x > 1, Collectors.counting()));

10.Collectors.joining(","):拼接字符串。

System.out.println(Stream.of("1", "3", "3", "2").collect(Collectors.joining(",")));

11.Collectors.collectingAndThen(Collectors.toList(), x -> x.size()):先执行collect操作后再执行第二个参数的表达式。这里是先塞到集合,再得出集合长度。

Integer integer = Stream.of("1", "2", "3").collect(Collectors.collectingAndThen(Collectors.toList(), x -> x.size()));

12.Collectors.mapping(...):跟Stream的map操作类似,只是参数有点区别

System.out.println(Stream.of(1, 3, 5).collect(Collectors.mapping(x -> x + 1, Collectors.toList())));

collect的几种形式_Stream类的collect方法相关推荐

  1. 细说final的的四种用法-----修饰类,修饰方法,常量,修饰参数 及内部类与final

    final关键字用于修饰类 public final class 类名称 { - } 一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写,java中典型的final修饰的类 Strin ...

  2. collect的几种形式_Java 8 新特性 Stream类的collect方法

    1.Collectors.toList():转换成List集合./ Collectors.toSet():转换成set集合. System.out.println(Stream.of("a& ...

  3. collect的几种形式_Java中的collection集合类型总结

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集 ...

  4. php怎么调用类里面的方法_php调用类中的方法

    PHP外文名:PHP: Hypertext Preprocessor,中文名:超文本预处理器是一种通用开源脚本语言.可以是未实例化的类名直接调用.下面由小编整理了几种php调用类中的方法,希望对大家有 ...

  5. java 1.5 代替for循环_J2EE 1.5 提供的另一种形式的for循环

    J2SE 1.5提供了另一种 来遍历数组和Collection等 义能被这样遍历的类,并解 形式的for循环.借助这种形式 类型的对象.本文介绍使用这种 释和这一机制的一些常见问题. 的for循环,可 ...

  6. 【从零学习OpenCV 4】4种读取Mat类元素的的方法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  7. Go 两种形式的“类型转换”

    Go 的类型转换常常让人有点迷,有两种形式的"类型转换": Type(obj) :这种形式的类型转换要求 obj 对象的类型和 Type 是等价类型,即实现了相同的方法 obj.( ...

  8. python赋值语句格式_Python中变量和变量赋值的几种形式

    动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...

  9. python变量和变量赋值的几种形式

    动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...

最新文章

  1. vim删除文件所有内容
  2. mysql和mybatis面试题_2020年,MyBatis常见面试题总结
  3. weblogic12.1.3安装
  4. 《Python Cookbook 3rd》笔记(3.6):复数的数学运算
  5. python秒表游戏_数学游戏Tkinter中的Python计时器
  6. screw ---- 数据库转文档
  7. 你不能访问此文件夹,因为你组织的安全策略阻止了未经身份验证的来宾访问
  8. 如何看待 Kotlin 成为 Android 官方支持开发语言?
  9. linux系统查看硬盘序列号
  10. cisco链路聚合配置
  11. 网络管理员考试试题分类精解电子书
  12. 世界城市与北京时差表
  13. 【题解】LuoGu5369:[PKUSC2018]最大前缀和
  14. python 配对t检验_配对t检验的python实现
  15. 计算机网络代表第几次革命,互联网:人类生产力的第三次革命
  16. 关于goole IO大会发布的android M和android studio1.3的更新
  17. 最强神器工具:新一代多系统启动 U 盘装机解决方案
  18. OCTF2016--piapiapia
  19. 林瑞c语言代码规范,林瑞庆
  20. JS在VS coder界面写promt和alter语句无法在浏览器页面显示

热门文章

  1. 学习算法,你需要掌握这些编程基础(包含JAVA和C++)
  2. 桌面系统集成WEB认证系统方案
  3. 《炬丰科技-半导体工艺》通过蚀刻形成激光谐振器
  4. 计算机大赛搞笑id,你见过最搞笑的游戏ID是什么?能想到这些的都是人才
  5. python pywinauto 单击鼠标_告别双手重复操作,用Python自动控制鼠标和键盘
  6. cf机器作弊严重限制机器登录一分钟_如何解除LOL CF DNF23 0“机器作弊行为严重,限制机器登录”(教程)...
  7. 微信纵剑仙界服务器选不了吗,纵剑仙界微信登录版
  8. OSChina 周五乱弹 —— 坑坑小伙伴大合集
  9. 2021.1.16课堂测试2
  10. 闺蜜计算机,致闺蜜的暖心唯美句子大全