Java8特性-如何理解Stream中的FlatMap

Java8特性-如何理解Stream中的FlatMap

0.前言

  在学习Stream的过程中,FlatMap的理解是受阻点之一,所以单独写一篇来谈谈我对FlatMap的看法。关于Stream的完整博客可以参考我的这篇Java-Stream学习笔记(上)
  在这之前,为了方便演示,写了一个实体类(包含姓名,年龄,工资属性)。


Employee:

package com.lordbao.entity;

import java.util.Objects;

/**
 * @Author Lord_Bao
 * @Date 2020/10/5 11:31
 * @Version 1.0
 */
public class Employee {
   
    private String username;
    private int age;
    private int salary;

    public Employee() {
   
    }

    public Employee(String username, int age, int salary) {
   
        this.username = username;
        this.age = age;
        this.salary = salary;
    }

    public String getUsername() {
   
        return username;
    }

    public void setUsername(String username) {
   
        this.username = username;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }

    public int getSalary() {
   
        return salary;
    }

    public void setSalary(int salary) {
   
        this.salary = salary;
    }

    @Override
    public String toString() {
   
        return "Employee{" +
                "username='" + username + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }

    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return age == employee.age &&
                salary == employee.salary &&
                Objects.equals(username, employee.username);
    }

    @Override
    public int hashCode() {
   
        return Objects.hash(username, age, salary);
    }
}


1.正文

  <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)。此方法是将Stream中的每个元素映射成一个流,然后将每个流的中的元素都取出来合并,然后返回合并后的新流。

在这里插入图片描述

  按照这个逻辑将Stream中的每个元素都映射为Stream,然后将每个Stream都拆解,将拆解后的元素组装成新的Stream。貌似看起来有点模糊,不如Map好理解啊。

  其实这里可以这么分析,什么元素能够映射为Stream呢?换个问题就是Stream是怎么创建的?大多数是通过集合,数组呗。那么我可不可以理解为本来的数据源就是集合或是数组,而它存储的元素恰好也是集合或是数组呢?

  按照这个思路,我设计了如下的例子。

测试代码:


                
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值