Stream之flatMap
一、flatMap简介
flatMap:将小Stream转换为大Stream
二、示例转换要求
目标:将如下对象中的分类category提取出来,去重。其中如"哲学,爱情",需要解析为两个分类,["哲学","爱情"]
[{"age":33,"books":[{"category":"哲学,爱情","id":1,"intro":"用一把刀划分了爱恨","name":"刀的两侧是光明与黑暗","score":88},{"category":"个人成长,爱情","id":2,"intro":"讲述如何从失败中明悟真理","name":"一个人不能死在同一把刀下","score":99}],"id":1,"intro":"一个从菜刀中明悟哲理的祖安人","name":"蒙多"},{"age":15,"books":[{"category":"哲学","id":3,"intro":"带你用思维去领略世界的尽头","name":"那风吹不到的地方","score":85},{"category":"哲学","id":3,"intro":"带你用思维去领略世界的尽头","name":"那风吹不到的地方","score":85},{"category":"爱情,个人传记","id":4,"intro":"一个哲学家的恋爱观注定很难把他所在的时代理解","name":"吹或不吹","score":56}],"id":2,"intro":"狂风也追逐不上他的思考速度","name":"亚拉索"},{"age":14,"books":[{"category":"爱情","id":5,"intro":"无法想象一个武者能对他的伴侣这么的宽容","name":"你的剑就是我的剑","score":56},{"category":"个人传记","id":6,"intro":"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?","name":"风与剑","score":100},{"category":"个人传记","id":6,"intro":"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?","name":"风与剑","score":100}],"id":3,"intro":"是这个世界在限制他的思维","name":"易"},{"age":14,"books":[{"category":"爱情","id":5,"intro":"无法想象一个武者能对他的伴侣这么的宽容","name":"你的剑就是我的剑","score":56},{"category":"个人传记","id":6,"intro":"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?","name":"风与剑","score":100},{"category":"个人传记","id":6,"intro":"两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?","name":"风与剑","score":100}],"id":3,"intro":"是这个世界在限制他的思维","name":"易"}]
实现结果
["哲学","爱情","个人成长","个人传记"]
基础代码
作家
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Author {private Long id;private String name;private Integer age;private String intro;private List<Book> books;
}
书籍
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Book {private Long id;private String name;//书籍分类private String category;private Integer score;private String intro;
}
private static List<Author> getAuthors() {
//数据初始化Author author = new Author(1L, "蒙多", 33, "一个从菜刀中明悟哲理的祖安人", null);Author author2 = new Author(2L, "亚拉索", 15, "狂风也追逐不上他的思考速度", null);Author author3 = new Author(3L, "易", 14, "是这个世界在限制他的思维", null);Author author4 = new Author(3L, "易", 14, "是这个世界在限制他的思维", null);//书籍列表List<Book> books1 = new ArrayList<>();List<Book> books2 = new ArrayList<>();List<Book> books3 = new ArrayList<>();books1.add(new Book(1L, "刀的两侧是光明与黑暗", "哲学,爱情", 88, "用一把刀划分了爱恨"));books1.add(new Book(2L, "一个人不能死在同一把刀下", "个人成长,爱情", 99, "讲述如何从失败中明悟真理"));books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));books2.add(new Book(4L, "吹或不吹", "爱情,个人传记", 56, "一个哲学家的恋爱观注定很难把他所在的时代理解"));books3.add(new Book(5L, "你的剑就是我的剑", "爱情", 56, "无法想象一个武者能对他的伴侣这么的宽容"));books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?"));books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢?"));author.setBooks(books1);author2.setBooks(books2);author3.setBooks(books3);author4.setBooks(books3);List<Author> authorList = new ArrayList<>(Arrays.asList(author, author2, author3, author4));return authorList;}
三、代码实现
1、代码
private static void test07() {//获取数据List<Author> authors = getAuthors();System.out.println(JSON.toJSONString(authors));List<String> collect = authors.stream() //获取流.flatMap(author -> author.getBooks().stream()) //获取作家书籍流,并合并.distinct() //去重合并后的书籍.flatMap(book -> Arrays.stream(book.getCategory().split(","))) //获取书籍分类,并将分类解析转换为流,合并.distinct() //分类去重.collect(Collectors.toList());System.out.println(JSON.toJSONString(collect));}
2、 执行过程
Stream之flatMap相关推荐
- java8 stream map flatMap
集合操作stream出了以后简化了代码和增强了可读性. 今天使用map和flatMap简单记录一下. 例: public class Test {public static void main(Str ...
- Java Stream map flatMap mapMulti的升维和降维
//升维List<Integer> list = List.of(4, 5, 6);System.out.println("第1个");//mapMulti产生额外的一 ...
- stream map方法_Java Stream中map和flatMap方法
最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...
- java stream flatmap
返回 调用 <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> ...
- Java Stream flatMap()
Java Stream flatMap() is a very useful function to flatten the Stream after applying the given funct ...
- Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作
点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...
- Stream.flatMap
<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> ma ...
- java flatmapfunction_Java Stream中map和flatMap方法
最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...
- Java 8中Stream API的这些奇技淫巧!你都Get到了吗?
作者:我是你的小眼睛儿 https://www.jianshu.com/p/9fe8632d0bc2 Stream简介 1.Java 8引入了全新的Stream API.这里的Stream和I/O流不 ...
最新文章
- js递归函数使用介绍
- python中需要用到的英文词汇-使用python从语料库中提取最常用的单词
- C++基础知识之vector
- linux 等待子线程退出,等待一组子线程退出的问题__线程_pthread_join_终止_pthread_detach_释放__169IT.COM...
- 关于php socket客户端连接java socket服务器端,出现连接中断的问题。
- 图像处理一些常用的网站
- 网速正常,一打开IE总是卡很久
- xgboost实例_XGBoost超详细推导,终于有人讲明白了!
- NamingException
- Mysql学习总结(9)——MySql视图原理讲解与使用大全
- Java应用案例分析_Java应用启动参数实例解析
- MySQL5.0修改默认编码格式为UTF-8(修复MySQL中文乱码)
- CUDA Fortran for Scientists and Engineers第二版翻译
- IDEA取消双击Shift全局搜索
- 大数据公司数据挖掘的49个案例
- 下载超星或读秀图书时,怎么搞定完整书签?
- 索尼1a dac插电脑用什么驱动。在哪下载,求助
- Python爬虫 批量下载美桌网高清美女壁纸
- 详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图
- 15 python的文件操作
热门文章
- 设计企业数字化转型规划
- 【C++】面向对象技术
- 五天入门SpringBoot(3)--controller、service、serviceImplement、mapper(DAO)的基本概念
- 常用的FireFox扩展插件
- 华尔街留下的指标之王(附代码展示)
- 论文阅读:A Semantic-based Method for Unsupervised Commonsense Question Answering
- js获取随机数的方法
- JavaFX Image Invalid URL or resource not found
- e3mall商城的归纳总结3之后台商品节点、认识nginx
- 企业微信如何查看员工的使用数据