将多维嵌套列表转换为单维列表

  1. EmployeeTestCase.java
  1. package com.example.demo;
  2.  
  3. import lombok.Data;
  4. import lombok.ToString;
  5. import lombok.extern.log4j.Log4j2;
  6. import org.junit.Test;
  7.  
  8. import java.util.Collection;
  9. import java.util.List;
  10. import java.util.stream.Collectors;
  11. import java.util.stream.LongStream;
  12. import java.util.stream.Stream;
  13.  
  14. import static org.junit.Assert.assertEquals;
  15. import static org.junit.Assert.assertTrue;
  16.  
  17. @Log4j2
  18. public class EmployeeTestCase extends BaseTest{
  19.  
  20. @Test
  21. public void flatMap() {
  22. List<Employee> employeesAll = listFlat.stream().flatMap(Collection::stream).collect(Collectors.toList());
  23. assertTrue(employeesAll.size() == 5);
  24.  
  25. List<Employee> employeesAll2 = listFlat.stream().flatMap(employees -> {
  26. Stream<Employee> stream = employees.stream();
  27. return stream;
  28. }).collect(Collectors.toList());
  29. assertEquals(employeesAll, employeesAll2);
  30.  
  31. List<Long> listFlatLong = listFlat.stream()
  32. .flatMap(employees -> employees.stream())
  33. .peek(System.out::println)
  34. .flatMapToLong(employee -> LongStream.of(employee.getId()))
  35. .peek(System.out::println)
  36. .boxed()
  37. .collect(Collectors.toList());
  38. log.info("listFlatLong:{}", listFlatLong.toString());
  39.  
  40. List<Long> listFlatLong2 = listFlat.stream()
  41. .flatMap(employees -> employees.stream())
  42. .peek(System.out::println)
  43. .mapToLong(Employee::getId)
  44. .peek(System.out::println)
  45. .boxed()
  46. .collect(Collectors.toList());
  47.  
  48. List<Double> listFlatName = listFlat.stream().flatMap(employees -> employees.stream())
  49. .peek(System.out::println)
  50. .map(employee -> employee.getSalary())
  51. .peek(System.out::println)
  52. .collect(Collectors.toList());
  53. }
  54.  
  55. }
  1. BaseTest.java
  1. package com.example.demo;
  2.  
  3. import java.util.Arrays;
  4. import java.util.List;
  5.  
  6. public class BaseTest {
  7. protected static final List<Employee> list = Arrays.asList(
  8. new Employee(1, "Alex", 1000),
  9. new Employee(2, "Michael", 2000),
  10. new Employee(3, "Jack", 1500),
  11. new Employee(4, "Owen", 1500),
  12. new Employee(5, "Denny", 2000));
  13.  
  14. protected static final List<List<Employee>> listFlat = Arrays.asList(
  15. Arrays.asList(new Employee(1, "Alex", 1000),
  16. new Employee(2, "Michael", 2000)),
  17. Arrays.asList(new Employee(3, "Jack", 1500),
  18. new Employee(4, "Owen", 1500)),
  19. Arrays.asList(new Employee(5, "Denny", 2000)));
  20. }

关注公众号,坚持每天3分钟学习

Stream系列(三) FlatMap方法使用的更多相关文章

  1. 【Java 8】Stream中flatMap方法

    在java 8 Stream中,flatMap方法是一个维度升降的方法 举例说明 给 定 单 词 列 表["Hello","World"] ,要返回列表 [&q ...

  2. jdk8系列三、jdk8之stream原理及流创建、排序、转换等处理

    一.为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX ...

  3. Java多线程系列三——实现线程同步的方法

    两种实现线程同步的方法 方法 特性 synchronized 不需要显式地加解锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁 ...

  4. 《Java多线程面试题》系列-创建线程的三种方法及其区别

    1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...

  5. 【Java多线程系列三】实现线程同步的方法

    两种实现线程同步的方法 方法 特性 synchronized  不需要显式的加锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁  ...

  6. MVC学习系列4--@helper辅助方法和用户自定义HTML方法

    在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...

  7. Javascript定义类(class)的三种方法

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  8. Linux启动新进程的三种方法

    程序中,我们有时需要启动一个新的进程,来完成其他的工作.下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程system函数,是通过启动shell进 ...

  9. [转]Javascript定义类的三种方法

    作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...

  10. 电容值E系列标称方法

    本节首先介绍常用的E系列标称方法,然后介绍电阻.电容器.电感器.二极管的分类.性能和识别方法,以及简单的实用电路. 一.E系列标称方法 厂家生产的电阻器,并不是包含任何阻值,就像人民币,只有1.2.5 ...

随机推荐

  1. JVM(1) Java内存区域

    对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题.不过,也正是因为Java程序员把内存控制的权 ...

  2. Andriod Studio设置类默认签名模板

  3. C和C++引用传递和数组传参引用

    引用传递有两种传参方式,具体可参考文章 概括地讲,就是 *声明一个形参是指针,所以需要传递指针实参,对应的函数实现也应当遵循指针的语法.这种实现思路并不针对于C或者C++,因为它们都有指针,所以都可以 ...

  4. 在windows下用with open 打开html文件报gbk错误

    with open('xx.html'  , 'rb' ,enconding='utf-8')as f:    可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容

  5. Font Awesome图标字体应用及相关

    作为web开发者,难免要经常要用到些小图标,给自己web增添几分活力和多样性.像这些: 而Font Awesome刚好为我们提供了这些.到目前为止,Font Awesome提供了有500多个可缩放的的 ...

  6. MIT线性代数:3.矩阵相乘

  7. 无聊的 邮递员 插头dp

    邮递员想知道,如果他每天都用不同路线走过10×20个点阵邮筒,他必须活过多少个世纪才能走遍所有方案? 7:00 改完T1,开始肝插头dp 7:10 放弃,颓博客 7:20 学习插头dp 7:21 放弃 ...

  8. 基于华为物联网IOT的应用开发 ---界面管理开发

    在前面随笔<基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装>介绍过IOT中应用侧SDK的封装,主要就是基于华为IOT的应用侧封装,以便在应用系统中进行调用.应用侧SDK ...

  9. JavaScript部分案例

    JavaScript 是 Web 的编程语言. 所有现代的 HTML 页面都使用 JavaScript. JavaScript 非常容易学. 阅读本教程,您需要有以下基础: HTML 教程 CSS 教 ...

  10. php 环境require(): open_basedir restriction in effect 错误

    php 环境require(): open_basedir restriction in effect 错误 错误日志显示,访问脚本不在 open_basedir的限定目录里面 解决方法打开fastc ...