java stream collect_java流stream中的collect()方法详解
public class StreamTest {
/**
* stream.collect() 的本质由三个参数构成,
* 1. Supplier 生产者, 返回最终结果
* 2. BiConsumer accumulator 累加器
* 第一个参数是要返回的集合, 第二个参数是遍历过程中的每个元素,
* 将流中每个被遍历的元素添加到集合中
* 3. BiConsumer combiner 合并器, 在有并行流的时候才会有用, 一个流时代码不会走到这里
* 将第二步遍历得到的所有流形成的list都添加到最终的list中,
* 最后返回list1
*/
@Test
public void Test() {
Stream stream = Stream.of("hello", "world", "helloworld");
// 最原始和基础的方式
/*
List list = stream.collect(
()->new ArrayList(),
(theList, item) -> theList.add(item),
(list1, list2) -> list1.addAll(list2)
);
*/
// 打印出更详尽的过程
List listDetail = stream.collect(
() -> {
ArrayList arrayList = new ArrayList<>();
System.out.println("第一个list诞生, size: " + arrayList.size());
return arrayList;
},
(theList, item) -> {
System.out.println("第二个list的size: " + theList.size());
theList.add(item);
},
(list1, list2) -> {
System.out.println("第三个list1的size: " + list1.size());
System.out.println("第四个list2的size: " + list2.size());
list1.addAll(list2);
}
);
/* 输出
第一个list诞生, size: 0
第二个list的size: 0
第二个list的size: 1
第二个list的size: 2
* */
// 使用方法引用来传递行为, 更加清晰易懂, new(新建) -> add(累加) -> addAll(合并)
List list2 = stream.collect(LinkedList::new, LinkedList::add, LinkedList::addAll);
String concat = stream.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
System.out.println(concat);
}
@Test
public void Test2() {
Stream stream = Stream.of("hello", "world", "helloworld");
// 这样的写法兼具灵活和简单
ArrayList list = stream.collect(Collectors.toCollection(ArrayList::new));
TreeSet treeSet = stream.collect(Collectors.toCollection(TreeSet::new));
String s = stream.collect(Collectors.joining()); // 拼接成字符串
HashMap map = stream.collect(HashMap::new, (x, y) -> {
x.put(y, y); // 自己做自己的key
}, HashMap::putAll);
}
}
java stream collect_java流stream中的collect()方法详解相关推荐
- java stream collect_java stream流中的collect()方法详解
public class StreamTest { /** * stream.collect() 的本质由三个参数构成, * 1. Supplier 生产者, 返回最终结果 * 2. BiConsum ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- Java中的main()方法详解
源文作者:leizhimin 源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...
- java中main是什么_Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- java 三种将list转换为map的方法详解
这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...
- java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解
[Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- php 文件扫描去重,PHP中的去重方法详解和文件下载
本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...
- keep alive PHP,vue中keep-alive使用方法详解
这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...
最新文章
- 解决Office互操作错误检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005...
- 即时通讯:XMPP基础
- CMDB功能分析与实现方案
- 什么是HBase?它是怎样工作的?终于有人讲明白了
- Java,C实现约瑟夫环,一元多项式运算器
- 二阶等差数列的性质及应用
- HTML - 文本及其格式化
- 被欧美公司垄断的工业软件,中国还有机会吗?
- 对抗神经网络对抗攻击_您将如何检测针对神经网络的网络攻击?
- 关于win10笔记本电脑插入耳机后依旧外放的问题(亲测戴尔)
- Hyperledger Fabric 1.0 公有云安装7--集群部署记录
- 将ipa文件安装到手机的最简单方法和将ipa发布到appstore的方法
- cookie 、localStorage 和 sessionStorage 区别
- 真的存在“对事不对人”吗?
- PS改变图片颜色的方法
- Linux-dd命令详解
- win10无法自动修复此计算机,Win10 无法启动 自动修复无限循环
- 汇编语言程序设计期末总结
- 十多个巨头App上可跑智能小程序了
- 优化嵌入式软件的几点技巧
热门文章
- 鼠标hover表格头部信息出现闪烁
- Web API-基本认知
- 告知书页面html样式,纯CSS实现的三种通知栏滚动效果
- java数列的个位数求和_java二位数组相加
- SQL Server高级查询之T-SQL编程(存储过程)
- Tricks Device 最短路+最大流
- MySQL怎么查同一列多行展示_一个MySQL查询将多个行中的字符串合并为一行,并在另一列中显示相应的用户ID总和?...
- 操作系统—进程的定义、组成和组织方式(思维导图)
- 端到端--流量控制、可靠传输和滑动窗口机制学习资料整合
- 九大背包问题专题--背包问题求具体方案数