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()方法详解相关推荐

  1. java stream collect_java stream流中的collect()方法详解

    public class StreamTest { /** * stream.collect() 的本质由三个参数构成, * 1. Supplier 生产者, 返回最终结果 * 2. BiConsum ...

  2. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  3. Java中的main()方法详解

    源文作者:leizhimin    源文链接:http://lavasoft.blog.51cto.com/62575/53263 源文作者版权申明: 版权声明:原创作品,允许转载,转载时请务必以超链 ...

  4. java中main是什么_Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  5. java 三种将list转换为map的方法详解

    这篇文章主要介绍了java 三种将list转换为map的方法详解的相关资料,需要的朋友可以参考下 java 三种将list转换为map的方法详解 在本文中,介绍三种将list转换为map的方法: 1) ...

  6. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解

    [Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...

  7. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  8. php 文件扫描去重,PHP中的去重方法详解和文件下载

    本文主要和大家分享PHP中的去重方法详解和文件下载,在php中文件导入过程中,经常会遇到重复事件,那么就需要我们去重,然后进行下载. 1.思想 先设置一个存储主键数组,和一个空数组.解析文件,然后看要 ...

  9. keep alive PHP,vue中keep-alive使用方法详解

    这次给大家带来vue中keep-alive使用方法详解,vue中keep-alive使用的注意事项有哪些,下面就是实战案例,一起来看一下. 1.keep-alive的作用以及好处 在做电商有关的项目中 ...

最新文章

  1. 解决Office互操作错误检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005...
  2. 即时通讯:XMPP基础
  3. CMDB功能分析与实现方案
  4. 什么是HBase?它是怎样工作的?终于有人讲明白了
  5. Java,C实现约瑟夫环,一元多项式运算器
  6. 二阶等差数列的性质及应用
  7. HTML - 文本及其格式化
  8. 被欧美公司垄断的工业软件,中国还有机会吗?
  9. 对抗神经网络对抗攻击_您将如何检测针对神经网络的网络攻击?
  10. 关于win10笔记本电脑插入耳机后依旧外放的问题(亲测戴尔)
  11. Hyperledger Fabric 1.0 公有云安装7--集群部署记录
  12. 将ipa文件安装到手机的最简单方法和将ipa发布到appstore的方法
  13. cookie 、localStorage 和 sessionStorage 区别
  14. 真的存在“对事不对人”吗?
  15. PS改变图片颜色的方法
  16. Linux-dd命令详解
  17. win10无法自动修复此计算机,Win10 无法启动 自动修复无限循环
  18. 汇编语言程序设计期末总结
  19. 十多个巨头App上可跑智能小程序了
  20. 优化嵌入式软件的几点技巧

热门文章

  1. 鼠标hover表格头部信息出现闪烁
  2. Web API-基本认知
  3. 告知书页面html样式,纯CSS实现的三种通知栏滚动效果
  4. java数列的个位数求和_java二位数组相加
  5. SQL Server高级查询之T-SQL编程(存储过程)
  6. Tricks Device 最短路+最大流
  7. MySQL怎么查同一列多行展示_一个MySQL查询将多个行中的字符串合并为一行,并在另一列中显示相应的用户ID总和?...
  8. 操作系统—进程的定义、组成和组织方式(思维导图)
  9. 端到端--流量控制、可靠传输和滑动窗口机制学习资料整合
  10. 九大背包问题专题--背包问题求具体方案数