一、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相关推荐

  1. java8 stream map flatMap

    集合操作stream出了以后简化了代码和增强了可读性. 今天使用map和flatMap简单记录一下. 例: public class Test {public static void main(Str ...

  2. Java Stream map flatMap mapMulti的升维和降维

    //升维List<Integer> list = List.of(4, 5, 6);System.out.println("第1个");//mapMulti产生额外的一 ...

  3. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  4. java stream flatmap

    返回 调用 <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> ...

  5. Java Stream flatMap()

    Java Stream flatMap() is a very useful function to flatten the Stream after applying the given funct ...

  6. Java8 Stream接口流式方法:map操作、filter操作以及flatMap操作

    点击关注公众号,利用碎片时间学习 关于stream 流式操作,在rt.jar 包里面,ReferencePipeline管道方式操作数据 下面集成所有操作方法,利用这些流,处理大数据的方式,效率提升明 ...

  7. Stream.flatMap

    <R> Stream<R> flatMap​(Function<? super T,​? extends Stream<? extends R>> ma ...

  8. java flatmapfunction_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  9. Java 8中Stream API的这些奇技淫巧!你都Get到了吗?

    作者:我是你的小眼睛儿 https://www.jianshu.com/p/9fe8632d0bc2 Stream简介 1.Java 8引入了全新的Stream API.这里的Stream和I/O流不 ...

最新文章

  1. js递归函数使用介绍
  2. python中需要用到的英文词汇-使用python从语料库中提取最常用的单词
  3. C++基础知识之vector
  4. linux 等待子线程退出,等待一组子线程退出的问题__线程_pthread_join_终止_pthread_detach_释放__169IT.COM...
  5. 关于php socket客户端连接java socket服务器端,出现连接中断的问题。
  6. 图像处理一些常用的网站
  7. 网速正常,一打开IE总是卡很久
  8. xgboost实例_XGBoost超详细推导,终于有人讲明白了!
  9. NamingException
  10. Mysql学习总结(9)——MySql视图原理讲解与使用大全
  11. Java应用案例分析_Java应用启动参数实例解析
  12. MySQL5.0修改默认编码格式为UTF-8(修复MySQL中文乱码)
  13. CUDA Fortran for Scientists and Engineers第二版翻译
  14. IDEA取消双击Shift全局搜索
  15. 大数据公司数据挖掘的49个案例
  16. 下载超星或读秀图书时,怎么搞定完整书签?
  17. 索尼1a dac插电脑用什么驱动。在哪下载,求助
  18. Python爬虫 批量下载美桌网高清美女壁纸
  19. 详解python 利用 pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图
  20. 15 python的文件操作

热门文章

  1. 设计企业数字化转型规划
  2. 【C++】面向对象技术
  3. 五天入门SpringBoot(3)--controller、service、serviceImplement、mapper(DAO)的基本概念
  4. 常用的FireFox扩展插件
  5. 华尔街留下的指标之王(附代码展示)
  6. 论文阅读:A Semantic-based Method for Unsupervised Commonsense Question Answering
  7. js获取随机数的方法
  8. JavaFX Image Invalid URL or resource not found
  9. e3mall商城的归纳总结3之后台商品节点、认识nginx
  10. 企业微信如何查看员工的使用数据