Stream系列(三) FlatMap方法使用
将多维嵌套列表转换为单维列表
- EmployeeTestCase.java
- package com.example.demo;
- import lombok.Data;
- import lombok.ToString;
- import lombok.extern.log4j.Log4j2;
- import org.junit.Test;
- import java.util.Collection;
- import java.util.List;
- import java.util.stream.Collectors;
- import java.util.stream.LongStream;
- import java.util.stream.Stream;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
- @Log4j2
- public class EmployeeTestCase extends BaseTest{
- @Test
- public void flatMap() {
- List<Employee> employeesAll = listFlat.stream().flatMap(Collection::stream).collect(Collectors.toList());
- assertTrue(employeesAll.size() == 5);
- List<Employee> employeesAll2 = listFlat.stream().flatMap(employees -> {
- Stream<Employee> stream = employees.stream();
- return stream;
- }).collect(Collectors.toList());
- assertEquals(employeesAll, employeesAll2);
- List<Long> listFlatLong = listFlat.stream()
- .flatMap(employees -> employees.stream())
- .peek(System.out::println)
- .flatMapToLong(employee -> LongStream.of(employee.getId()))
- .peek(System.out::println)
- .boxed()
- .collect(Collectors.toList());
- log.info("listFlatLong:{}", listFlatLong.toString());
- List<Long> listFlatLong2 = listFlat.stream()
- .flatMap(employees -> employees.stream())
- .peek(System.out::println)
- .mapToLong(Employee::getId)
- .peek(System.out::println)
- .boxed()
- .collect(Collectors.toList());
- List<Double> listFlatName = listFlat.stream().flatMap(employees -> employees.stream())
- .peek(System.out::println)
- .map(employee -> employee.getSalary())
- .peek(System.out::println)
- .collect(Collectors.toList());
- }
- }
- BaseTest.java
- package com.example.demo;
- import java.util.Arrays;
- import java.util.List;
- public class BaseTest {
- protected static final List<Employee> list = Arrays.asList(
- new Employee(1, "Alex", 1000),
- new Employee(2, "Michael", 2000),
- new Employee(3, "Jack", 1500),
- new Employee(4, "Owen", 1500),
- new Employee(5, "Denny", 2000));
- protected static final List<List<Employee>> listFlat = Arrays.asList(
- Arrays.asList(new Employee(1, "Alex", 1000),
- new Employee(2, "Michael", 2000)),
- Arrays.asList(new Employee(3, "Jack", 1500),
- new Employee(4, "Owen", 1500)),
- Arrays.asList(new Employee(5, "Denny", 2000)));
- }
关注公众号,坚持每天3分钟学习
Stream系列(三) FlatMap方法使用的更多相关文章
- 【Java 8】Stream中flatMap方法
在java 8 Stream中,flatMap方法是一个维度升降的方法 举例说明 给 定 单 词 列 表["Hello","World"] ,要返回列表 [&q ...
- jdk8系列三、jdk8之stream原理及流创建、排序、转换等处理
一.为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX ...
- Java多线程系列三——实现线程同步的方法
两种实现线程同步的方法 方法 特性 synchronized 不需要显式地加解锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁 ...
- 《Java多线程面试题》系列-创建线程的三种方法及其区别
1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...
- 【Java多线程系列三】实现线程同步的方法
两种实现线程同步的方法 方法 特性 synchronized 不需要显式的加锁,易实现 ReentrantLock 需要显式地加解锁,灵活性更好,性能更优秀,结合Condition可实现多种条件锁 ...
- MVC学习系列4--@helper辅助方法和用户自定义HTML方法
在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- Linux启动新进程的三种方法
程序中,我们有时需要启动一个新的进程,来完成其他的工作.下面介绍了三种实现方法,以及这三种方法之间的区别. 1.system函数-调用shell进程,开启新进程system函数,是通过启动shell进 ...
- [转]Javascript定义类的三种方法
作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...
- 电容值E系列标称方法
本节首先介绍常用的E系列标称方法,然后介绍电阻.电容器.电感器.二极管的分类.性能和识别方法,以及简单的实用电路. 一.E系列标称方法 厂家生产的电阻器,并不是包含任何阻值,就像人民币,只有1.2.5 ...
随机推荐
- JVM(1) Java内存区域
对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题.不过,也正是因为Java程序员把内存控制的权 ...
- Andriod Studio设置类默认签名模板
- C和C++引用传递和数组传参引用
引用传递有两种传参方式,具体可参考文章 概括地讲,就是 *声明一个形参是指针,所以需要传递指针实参,对应的函数实现也应当遵循指针的语法.这种实现思路并不针对于C或者C++,因为它们都有指针,所以都可以 ...
- 在windows下用with open 打开html文件报gbk错误
with open('xx.html' , 'rb' ,enconding='utf-8')as f: 可能原因是由于HTML是在Linux下开发的,与windons 系统编码不兼容
- Font Awesome图标字体应用及相关
作为web开发者,难免要经常要用到些小图标,给自己web增添几分活力和多样性.像这些: 而Font Awesome刚好为我们提供了这些.到目前为止,Font Awesome提供了有500多个可缩放的的 ...
- MIT线性代数:3.矩阵相乘
- 无聊的 邮递员 插头dp
邮递员想知道,如果他每天都用不同路线走过10×20个点阵邮筒,他必须活过多少个世纪才能走遍所有方案? 7:00 改完T1,开始肝插头dp 7:10 放弃,颓博客 7:20 学习插头dp 7:21 放弃 ...
- 基于华为物联网IOT的应用开发 ---界面管理开发
在前面随笔<基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装>介绍过IOT中应用侧SDK的封装,主要就是基于华为IOT的应用侧封装,以便在应用系统中进行调用.应用侧SDK ...
- JavaScript部分案例
JavaScript 是 Web 的编程语言. 所有现代的 HTML 页面都使用 JavaScript. JavaScript 非常容易学. 阅读本教程,您需要有以下基础: HTML 教程 CSS 教 ...
- php 环境require(): open_basedir restriction in effect 错误
php 环境require(): open_basedir restriction in effect 错误 错误日志显示,访问脚本不在 open_basedir的限定目录里面 解决方法打开fastc ...