java stream flatMap的使用及个人理解

这篇具有很好参考价值的文章主要介绍了java stream flatMap的使用及个人理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.我认为用简单朴素的理解和使用,是对工具最好的诠释。java jdk8开始提供了stream流,方便我更高效的操作集合和编写代码。其中flatmap流中间操作api,我认为简单来说是对“集合中的集合的操作和展开”。比如说,一个对象集合里面的每个对象还有个集合对象。这时,我们如果需要对这个集合的所有对象的集合对象进行操作,那么flatmap就是一个不错的选择。

2.接下来举个例子,比如有一群人的每个人都有多套房子,我想把这群人的所有房子的地址都去重的统计出来。

首先person类定义开整

class Person{
    private Long id;
    private Integer age;
    private String name;
    private String idCard;
    private List<bigHouse> listHouse;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public List<bigHouse> getListHouse() {
        return listHouse;
    }

    public void setListHouse(List<bigHouse> listHouse) {
        this.listHouse = listHouse;
    }
}

再定义一个房子bigHouse类

class bigHouse{

    private String address;
    private BigDecimal price;
    private Integer useAge;

    public bigHouse(String address, BigDecimal price, Integer useAge) {
        this.address = address;
        this.price = price;
        this.useAge = useAge;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getUseAge() {
        return useAge;
    }

    public void setUseAge(Integer useAge) {
        this.useAge = useAge;
    }
}

定义个main方法进行测试

public static void main(String[] args) {
        //数据填充
        Person p1 = new Person();
        p1.setId(1L);
        p1.setAge(22);
        p1.setName("p1");
        p1.setIdCard("1234");
        ArrayList<bigHouse> p1hList = new ArrayList<>();
        bigHouse p1h1 = new bigHouse("重庆",new BigDecimal(23),5);
        bigHouse p1h2 = new bigHouse("开州",new BigDecimal(62),3);
        bigHouse p1h3 = new bigHouse("南雅",new BigDecimal(6),3);
        p1hList.add(p1h1);
        p1hList.add(p1h2);
        p1hList.add(p1h3);
        p1.setListHouse(p1hList);
        Person p2 = new Person();
        p2.setId(2L);
        p2.setAge(23);
        p2.setName("p2");
        p2.setIdCard("1235");
        ArrayList<bigHouse> p2hList = new ArrayList<>();
        bigHouse p2h1 = new bigHouse("四川",new BigDecimal(223),7);
        bigHouse p2h2 = new bigHouse("重庆",new BigDecimal(123),9);
        bigHouse p2h3 = new bigHouse("南雅",new BigDecimal(6),3);
        p2hList.add(p2h1);
        p2hList.add(p2h2);
        p2hList.add(p2h3);
        p2.setListHouse(p2hList);
        Person p3 = new Person();
        p3.setId(3L);
        p3.setAge(24);
        p3.setName("p3");
        p3.setIdCard("1236");
        ArrayList<bigHouse> p3hList = new ArrayList<>();
        bigHouse p3h1 = new bigHouse("江苏",new BigDecimal(231),17);
        bigHouse p3h2 = new bigHouse("无锡",new BigDecimal(163),8);
        bigHouse p3h3 = new bigHouse("达州",new BigDecimal(8),3);
        p3hList.add(p3h1);
        p3hList.add(p3h2);
        p3hList.add(p3h3);
        p3.setListHouse(p2hList);
        //flatMap handle collection zhong collection
        //需求:提取所有的人房子的地址,并且去除
        List<Person> pList = new ArrayList<>();
        pList.add(p1);
        pList.add(p2);
        pList.add(p3);
        List<String> strings = pList.stream().flatMap(p -> {
            Stream<String> stream = p.getListHouse().stream().map(bigHouse::getAddress).distinct();
            return stream;
        }).distinct().collect(Collectors.toList());
        strings.forEach(System.out::print);
        ArrayList<String> list = CollUtil.newArrayList("ABC", "DEF", "GHI");
        List<String> collect = list.stream().flatMap(ele -> Stream.of(ele.split(""))).collect(Collectors.toList());
        collect.forEach(System.out::println);
//        List<String> list = Arrays.asList("l,y,w", "8,6,8");
//        List<String> collect = list.stream().flatMap(s -> {
//            String[] split = s.split(",");
//            new HashMap<>();
//            return Arrays.stream(split);
//        }).collect(Collectors.toList());
//        collect.forEach(System.out::println);

    }

完整代码如下:

package com.conpany.project.stream;

import cn.hutool.core.collection.CollUtil;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class FlatMap {

    public static void main(String[] args) {
        //数据填充
        Person p1 = new Person();
        p1.setId(1L);
        p1.setAge(22);
        p1.setName("p1");
        p1.setIdCard("1234");
        ArrayList<bigHouse> p1hList = new ArrayList<>();
        bigHouse p1h1 = new bigHouse("重庆",new BigDecimal(23),5);
        bigHouse p1h2 = new bigHouse("开州",new BigDecimal(62),3);
        bigHouse p1h3 = new bigHouse("南雅",new BigDecimal(6),3);
        p1hList.add(p1h1);
        p1hList.add(p1h2);
        p1hList.add(p1h3);
        p1.setListHouse(p1hList);
        Person p2 = new Person();
        p2.setId(2L);
        p2.setAge(23);
        p2.setName("p2");
        p2.setIdCard("1235");
        ArrayList<bigHouse> p2hList = new ArrayList<>();
        bigHouse p2h1 = new bigHouse("四川",new BigDecimal(223),7);
        bigHouse p2h2 = new bigHouse("重庆",new BigDecimal(123),9);
        bigHouse p2h3 = new bigHouse("南雅",new BigDecimal(6),3);
        p2hList.add(p2h1);
        p2hList.add(p2h2);
        p2hList.add(p2h3);
        p2.setListHouse(p2hList);
        Person p3 = new Person();
        p3.setId(3L);
        p3.setAge(24);
        p3.setName("p3");
        p3.setIdCard("1236");
        ArrayList<bigHouse> p3hList = new ArrayList<>();
        bigHouse p3h1 = new bigHouse("江苏",new BigDecimal(231),17);
        bigHouse p3h2 = new bigHouse("无锡",new BigDecimal(163),8);
        bigHouse p3h3 = new bigHouse("达州",new BigDecimal(8),3);
        p3hList.add(p3h1);
        p3hList.add(p3h2);
        p3hList.add(p3h3);
        p3.setListHouse(p2hList);
        //flatMap handle collection zhong collection
        //需求:提取所有的人房子的地址,并且去重
        List<Person> pList = new ArrayList<>();
        pList.add(p1);
        pList.add(p2);
        pList.add(p3);
        List<String> strings = pList.stream().flatMap(p -> {
            Stream<String> stream = p.getListHouse().stream().map(bigHouse::getAddress).distinct();
            return stream;
        }).distinct().collect(Collectors.toList());
        strings.forEach(System.out::print);
        ArrayList<String> list = CollUtil.newArrayList("ABC", "DEF", "GHI");
        List<String> collect = list.stream().flatMap(ele -> Stream.of(ele.split(""))).collect(Collectors.toList());
        collect.forEach(System.out::println);
//        List<String> list = Arrays.asList("l,y,w", "8,6,8");
//        List<String> collect = list.stream().flatMap(s -> {
//            String[] split = s.split(",");
//            new HashMap<>();
//            return Arrays.stream(split);
//        }).collect(Collectors.toList());
//        collect.forEach(System.out::println);

    }

}
class Person{
    private Long id;
    private Integer age;
    private String name;
    private String idCard;
    private List<bigHouse> listHouse;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public List<bigHouse> getListHouse() {
        return listHouse;
    }

    public void setListHouse(List<bigHouse> listHouse) {
        this.listHouse = listHouse;
    }
}
class bigHouse{

    private String address;
    private BigDecimal price;
    private Integer useAge;

    public bigHouse(String address, BigDecimal price, Integer useAge) {
        this.address = address;
        this.price = price;
        this.useAge = useAge;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getUseAge() {
        return useAge;
    }

    public void setUseAge(Integer useAge) {
        this.useAge = useAge;
    }
}

分析:flatmap看源码需要返回一个stream流

java flatmap,java,开发语言,jvm

 核心实现部分:

List<String> strings = pList.stream().flatMap(p -> {
    Stream<String> stream = p.getListHouse().stream().map(bigHouse::getAddress);
    return stream;
}).distinct().collect(Collectors.toList());

这个p就是有人对象,我们把每个人对象里面的房子的集合通过map返回地址这个字符串流,就是一个展开操作,最后再收集所有人的地址流,统一返回字符串。

看运行效果:

java flatmap,java,开发语言,jvm

 文章来源地址https://www.toymoban.com/news/detail-800457.html

到了这里,关于java stream flatMap的使用及个人理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】PySpark 数据计算 ② ( RDD#flatMap 方法 | RDD#flatMap 语法 | 代码示例 )

    RDD#map 方法 可以 将 RDD 中的数据元素 逐个进行处理 , 处理的逻辑 需要用外部 通过 参数传入 map 函数 ; RDD#flatMap 方法 是 在 RDD#map 方法 的基础上 , 增加了 \\\" 解除嵌套 \\\" 的作用 ; RDD#flatMap 方法 也是 接收一个 函数 作为参数 , 该函数被应用于 RDD 中的每个元素及元素嵌套的子元素

    2024年02月14日
    浏览(37)
  • kotlin flatten 与 flatMap

    kotln中 flatten 和 flatMap 在 Kotlin 中虽然都用于扁平化处理集合,但它们的用法和效果并不完全一样 flatten 函数主要应用于嵌套集合(如 List of List 或 Set of Set 等),它会将嵌套集合中的所有元素合并到一个单一层次的集合中。 flatMap 不仅可以将嵌套集合扁平化,更重要的是它允

    2024年01月25日
    浏览(43)
  • kotlin map 与 flatmap

    kotlin map 与 flatmap 是2个不同的概念的 map 是一种数据结构,flatmap 是一个高阶函数,处理集合用的 Map 是一种数据结构,它由一系列的键值对组成,每个键都是唯一的,并且与一个特定的值相关联。你可以通过键来查找对应的值 下面定义一个map 并往里面填写值 或者使用mapOf 跟

    2024年01月22日
    浏览(55)
  • map 和 flatMap 的区别

    ① map方法 ② flatMap方法 可以看到,不论是 map 还是 flatMap 方法,都是对以流的形式数据的处理,返回值同样都是流形式数据的泛型。本质一样,都是 map 操作,但是不同点在于,flatMap 操作会比 map 多一个 flat 操作。  \\\"flat\\\"单词本意有平的、扁平的含义,在源码中,我们对于

    2024年02月10日
    浏览(47)
  • 十二、Flink自定义 FlatMap 方法

    1、概述 1)作用 flatMap是将数据先map在打平,输入一个元素,可以输出0到多个元素 2)使用 1.匿名内部类 2.lambda表达式 3.实现FlatMapFunction接口 4.继承RichFlatMapFunction 2、代码实现 3、执行结果 1)输入测试数据 控制台输出执行结果

    2024年02月10日
    浏览(43)
  • JavaScript 数组展平方法: flat() 和 flatMap()

    从 ES2019 中开始引入了一种扁平化数组的新方法,可以展平任何深度的数组。 flat() 方法创建一个新数组,其中所有子数组元素以递归方式连接到特定深度。 语法:array.flat(depth) array : flat() 方法将在给定的数组中使用。 depth :可选参数,指定展平的深度,默认情况下,深度

    2024年02月09日
    浏览(40)
  • 17 | Spark中的map、flatMap、mapToPair mapvalues 的区别

    在Apache Spark中, map 、 flatMap 、 mapToPair 和 mapValues 是用于对RDD(Resilient Distributed Dataset)进行转换的不同操作。这些操作可以用来处理分布式数据集中的元素,但它们的用途和行为略有不同。 以下是它们的主要区别以及相应的Java代码示例: map : map 操作用于对RDD中的每个元

    2024年02月09日
    浏览(34)
  • 【flink番外篇】1、flink的23种常用算子介绍及详细示例(1)- map、flatmap和filter

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月04日
    浏览(41)
  • 【Kotlin】函数式编程 ① ( 函数式编程简介 | 高阶函数 | 函数类别 | Transform 变换函数 | 过滤函数 | 合并函数 | map 变换函数 | flatMap 变换函数 )

    编程范式 指的是 使用某种编程语言的 编程套路 或 编程习惯 ; 使用 Java 等高级语言进行的编程 , 编程范式 一般都是 面向对象编程 ; 与 面向对象编程 同等级的另外一种 编程范式 是 函数式编程 , 函数式编程 不依赖于 指定的语言 , 所有的编程语言都可以使用 函数式编程范式

    2024年01月18日
    浏览(47)
  • 【C语言深度剖析——第三节(关键字3)】《C语言深度解剖》+蛋哥分析+个人理解

    本文由@睡觉待开机原创,未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 前言: 本期我们继续探讨关于C深度解剖这本书相关内容,继上一篇博客,本篇博客来围绕“数据类型”、“原反补”有关话题进行探

    2024年01月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包