collect的几种形式_Stream类的collect方法
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方法相关推荐
- 细说final的的四种用法-----修饰类,修饰方法,常量,修饰参数 及内部类与final
final关键字用于修饰类 public final class 类名称 { - } 一个类如果是final的,那么其中所有的成员方法都无法进行覆盖重写,java中典型的final修饰的类 Strin ...
- collect的几种形式_Java 8 新特性 Stream类的collect方法
1.Collectors.toList():转换成List集合./ Collectors.toSet():转换成set集合. System.out.println(Stream.of("a& ...
- collect的几种形式_Java中的collection集合类型总结
Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集 ...
- php怎么调用类里面的方法_php调用类中的方法
PHP外文名:PHP: Hypertext Preprocessor,中文名:超文本预处理器是一种通用开源脚本语言.可以是未实例化的类名直接调用.下面由小编整理了几种php调用类中的方法,希望对大家有 ...
- java 1.5 代替for循环_J2EE 1.5 提供的另一种形式的for循环
J2SE 1.5提供了另一种 来遍历数组和Collection等 义能被这样遍历的类,并解 形式的for循环.借助这种形式 类型的对象.本文介绍使用这种 释和这一机制的一些常见问题. 的for循环,可 ...
- 【从零学习OpenCV 4】4种读取Mat类元素的的方法
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
- Go 两种形式的“类型转换”
Go 的类型转换常常让人有点迷,有两种形式的"类型转换": Type(obj) :这种形式的类型转换要求 obj 对象的类型和 Type 是等价类型,即实现了相同的方法 obj.( ...
- python赋值语句格式_Python中变量和变量赋值的几种形式
动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...
- python变量和变量赋值的几种形式
动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...
最新文章
- vim删除文件所有内容
- mysql和mybatis面试题_2020年,MyBatis常见面试题总结
- weblogic12.1.3安装
- 《Python Cookbook 3rd》笔记(3.6):复数的数学运算
- python秒表游戏_数学游戏Tkinter中的Python计时器
- screw ---- 数据库转文档
- 你不能访问此文件夹,因为你组织的安全策略阻止了未经身份验证的来宾访问
- 如何看待 Kotlin 成为 Android 官方支持开发语言?
- linux系统查看硬盘序列号
- cisco链路聚合配置
- 网络管理员考试试题分类精解电子书
- 世界城市与北京时差表
- 【题解】LuoGu5369:[PKUSC2018]最大前缀和
- python 配对t检验_配对t检验的python实现
- 计算机网络代表第几次革命,互联网:人类生产力的第三次革命
- 关于goole IO大会发布的android M和android studio1.3的更新
- 最强神器工具:新一代多系统启动 U 盘装机解决方案
- OCTF2016--piapiapia
- 林瑞c语言代码规范,林瑞庆
- JS在VS coder界面写promt和alter语句无法在浏览器页面显示
热门文章
- 学习算法,你需要掌握这些编程基础(包含JAVA和C++)
- 桌面系统集成WEB认证系统方案
- 《炬丰科技-半导体工艺》通过蚀刻形成激光谐振器
- 计算机大赛搞笑id,你见过最搞笑的游戏ID是什么?能想到这些的都是人才
- python pywinauto 单击鼠标_告别双手重复操作,用Python自动控制鼠标和键盘
- cf机器作弊严重限制机器登录一分钟_如何解除LOL CF DNF23 0“机器作弊行为严重,限制机器登录”(教程)...
- 微信纵剑仙界服务器选不了吗,纵剑仙界微信登录版
- OSChina 周五乱弹 —— 坑坑小伙伴大合集
- 2021.1.16课堂测试2
- 闺蜜计算机,致闺蜜的暖心唯美句子大全