Java-Stream-flatMap
Leave leave1 = new Leave("1","1",new Date(),CollUtil.newArrayList("A","B"));
Leave leave2 = new Leave("2","2",new Date(),CollUtil.newArrayList("C","D"));
Leave leave3 = new Leave("3","3",new Date(),CollUtil.newArrayList("E","F"));
ArrayList<Leave> leaves = CollUtil.newArrayList(leave1, leave2, leave3);
对于上述代码,如果我想取出第4个参数的集合如何处理呢?在flatMap之前,我所能想到的就是暴力的遍历吧,如下:
List<String> resultList = new ArrayList<>();
for (Leave leaf : leaves) {
resultList.addAll(leaf.getNameList());
}
这样就将所有的nameList放入一个集合中,但是如果我想用stream流呢?在未了解flatMap前,我可能会用Map,但是map有个问题在于,我想要一个集合,但是Map会生产集合嵌套集合,代码如下:
List<List<String>> resultList = leaves.stream().map(Leave::getNameList).collect(Collectors.toList());
如果我既想用stream,又想要List<String> resultList呢?flatMap闪亮登场:
List<String> resultList = leaves.stream()
.flatMap(leave -> leave.getNameList().stream())
.collect(Collectors.toList());
public static void main(String[] args) {
ArrayList<String> strings1 = CollUtil.newArrayList("123", "212", "212");
ArrayList<String> strings2 = CollUtil.newArrayList("abc", "qwe", "qbc");
List<String> collect = Stream.of(strings1,strings2).flatMap(Collection::stream).collect(Collectors.toList());
}
以上flatMap是将相同类型元素合并到一起,既然能合并到一起,那flatMap能不能将一起的元素拆分开呢?以下是将元素进行拆分:
ArrayList<String> list = CollUtil.newArrayList("ABC", "DEF", "GHI");
List<String> collect = list.stream().flatMap(ele -> Stream.of(ele.split(""))).collect(Collectors.toList());
Java-Stream-flatMap的更多相关文章
- java stream map和 flatmap区别
区别:map mapper返回R,flatMap mapper返回Stream<R> 官网解释 1,<R>Stream<R> flatMap(Function< ...
- Java Stream 使用详解
Stream是 Java 8新增加的类,用来补充集合类. Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的. Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的 ...
- Java Stream API入门篇
本文github地址 你可能还没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少类就清楚了.Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁,函数式编程写 ...
- Java 8 flatMap example
Java 8 flatMap example In Java 8, Stream can hold different data types, for examples: Stream<Stri ...
- Java Stream 流如何进行合并操作
1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...
- [源码解析] 当 Java Stream 遇见 Flink
[源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...
- 基础篇:JAVA.Stream函数,优雅的数据流操作
前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式 流的创建 流的各种数 ...
- Java Stream 流(JDK 8 新特性)
什么是 Steam Java 8 中新增了 Stream(流)来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作. 我们知道,Java 中 List 和 S ...
- 深度掌握 Java Stream 流操作,让你的代码高出一个逼格!
概念 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选.排序.聚合等. Stream 的操作符大体上分为两种:中间操作符和终止操作符 中 ...
- 全面吃透JAVA Stream流操作,让代码更加的优雅
全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...
随机推荐
- 【计算机网络】身份认证Oauth2
身份认证Oauth2 https://www.bilibili.com/video/BV1FL411h7es/?spm_id_from=333.999.0.0&vd_source=d11276 ...
- springboot 整合 ehcahe后,实现缓存数据 应用关闭时序列化(磁盘持久化),重启再加载
ehcache使用很长时间了,但是却没有用到缓存数据序列化(C#中是这么个说法)与再加载.这次因为业务中需要对缓存数据进行临时存储并再加载使用,实现该功能的方式多种多样.既然ehcache有磁盘保存机 ...
- Android 原生 SQLite 数据库的一次封装实践
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/CL4MsQEsrWS8n7lhXCOQ_g作者:Li Bingyan 本文主要讲述原生SQLi ...
- 【转载】内存基本概念-伙伴(Buddy)算法
简介 在Linux系统中,内存的分配与回收速率直接影响系统的存取效率.当内核频繁请求和释放不同大小的一组连续页框时,会导致许多外部空闲碎片,造成空间的浪费.使用伙伴算法可以有效地缓解该问题.伙伴关 ...
- zzuli 1079
以EOF结束输入的处理 使用cin.hasNext(),现在还不懂就先记这了 import java.util.Scanner; public class Main{ public static vo ...
- hdu 5547
***题意:4*4数独,要求在同一行同一列不能有相同的数字,另外在2*2的小单元里也不能有相同的数字 思路:DFS暴力搜索, 每个位置填1-4,递归回溯,判断是否符合条件,递归到最后一个位置+1则输出 ...
- mysql 复制表结构创建表及复制表结构与数据创建表
本文为博主原创,未经允许不得转载: 在开发过程或项目维护发布过程中,经常需要复制建表及复制表数据建表等,整理了以下四种常用的 mysql 命令. 1. create like 复制表结构(包含索引, ...
- 【C/C++】sscanf函数和正则表达式
此文所有的实验都是基于下面的程序:char str[10];for (int i = 0; i < 10; i++) str[i] = '!';执行完后str的值为str = "!!! ...
- SpringBoot - 阿里云OSS - 上传和删除
1,首先在 pom.xml 中加入maven依赖 <!-- 阿里云oss --> <dependency> <groupId>com.aliyun.oss</ ...
- 代码使我头疼之React初学习
前言 开始了,去年(2020)说要学的React,到现在2021年的12月底了,才来实施--(年底警告!年末总结还没开始写!) 不过前端为啥要学React呢?Vue不是很好用吗?Vue确实很好用,并且 ...