返回顶部
首页 > 资讯 > 后端开发 > JAVA >java中flatMap用法
  • 779
分享到

java中flatMap用法

flatMapstreamCollection压平Function 2023-09-04 11:09:32 779人浏览 薄情痞子
摘要

    java中map是把集合每个元素重新映射,元素个数不变,但是元素值发生了变化。而flatMap从字面上来说是压平这个映射,实际作用就是将每个元素进行一个一对多的拆分,细分成更小的单元,返回一个新的Stream流,新的流元素个数增加。

    java中map是把集合每个元素重新映射,元素个数不变,但是元素值发生了变化。而flatMap从字面上来说是压平这个映射,实际作用就是将每个元素进行一个一对多的拆分,细分成更小的单元,返回一个新的Stream流,新的流元素个数增加。

    java官方给出的示例如下:

# 按行读取文件内容Stream lines = Files.lines(path);# 将每一行文字按照空格拆分为单词Stream words = lines.flatMap(line -> Stream.of(line.split(" +")));

    如下所示的文本:

hello worldthis is a test txtdone

    经过这个转换,得到的结果如下:

[hello, world, this, is, a, test, txt, done]

    我们大概知道,flatMap压平的作用,就是把原来的三行字符串文字变为了一个流,流数组中每个元素是单词。 

    ============

    我们假设有这样的需求,有一个[[1,3],[2,4]]的二维数组,我们要得到一个一维数组[1,3,2,4]。那么这里的flatMap就正好排上用场,原来是二维的,现在压平为一维,正好分解了。

List lista = new ArrayList<>();lista.add(1);lista.add(3);List listb = new ArrayList<>();listb.add(2);listb.add(4);List> listc = new ArrayList<>();listc.add(lista);listc.add(listb);System.out.println(listc);List listd = listc.stream().flatMap(ele -> ele.stream()).collect(Collectors.toList());System.out.println(listd);

    运行程序打印信息如下:

[[1, 3], [2, 4]][1, 3, 2, 4]

    flatMap里面需要传入一个Function参数,这里根据需要将数组转为stream。其实可以直接传入一个函数名:Collection::stream,效果是一样的。

    完整代码如下:

package org.example;import java.io.IOException;import java.NIO.file.Files;import java.nio.file.Paths;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;public class FlatMapExample {    public static void main(String[] args) {        List lista = new ArrayList<>();        lista.add(1);        lista.add(3);        List listb = new ArrayList<>();        listb.add(2);        listb.add(4);        List> listc = new ArrayList<>();        listc.add(lista);        listc.add(listb);        System.out.println(listc);        List listd = listc.stream().flatMap(Collection::stream).collect(Collectors.toList());        System.out.println(listd);        try {            Stream stream = Files.lines(Paths.get("test.txt"));            // stream.forEach(System.out::println);            List words = stream.flatMap(line -> Stream.of(line.split(" +"))).collect(Collectors.toList());            System.out.println(Words);        } catch (IOException e) {            throw new RuntimeException(e);        }    }}

    运行截图:

 

    Stream对象经过一次操作之后,内容就会被清除,同时流也被关闭。如果还进行第二次其他操作,那么就会报错:

stream has already been operated upon or closed 

     所以进行流操作,一般都是把所有的流程都以链式写法写在一起,最后得到结果。

来源地址:https://blog.csdn.net/feinifi/article/details/128980814

--结束END--

本文标题: java中flatMap用法

本文链接: https://www.lsjlt.com/news/393412.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java中flatMap用法
        java中map是把集合每个元素重新映射,元素个数不变,但是元素值发生了变化。而flatMap从字面上来说是压平这个映射,实际作用就是将每个元素进行一个一对多的拆分,细分成更小的单元,返回一个新的Stream流,新的流元素个数增加。...
    99+
    2023-09-04
    flatMap stream Collection 压平 Function
  • 【Python】PySpark 数据计算 ② ( RDD#flatMap 方法 | RDD#flatMap 语法 | 代码示例 )
    文章目录 一、RDD#flatMap 方法1、RDD#flatMap 方法引入2、解除嵌套3、RDD#flatMap 语法说明 二、代码示例 - RDD#flatMap 方法 ...
    99+
    2023-08-31
    python 原力计划
  • RxJava中map和flatMap的用法区别源码解析
    目录前言:作用使用方法:mapflatMap源码分析mapflatMap结语前言: RxJava中提供了大量的操作符,这大大提高了了我们的开发效率。其中最基本的两个变换操作符就是ma...
    99+
    2024-04-02
  • Java中stream处理中map与flatMap的比较和使用案例
    前言 使用Java8的新特性Stream流式处理,可以提高对于集合的一些操作效率,再配合lambda表达式,可以极致的简化代码,尤其还有并行流这个东东,可以去 了解一下,在一些场合...
    99+
    2024-04-02
  • Java中stream处理map与flatMap时有什么区别
    这篇文章将为大家详细讲解有关Java中stream处理map与flatMap时有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。共同点和区别首先看一下源代码  <R>...
    99+
    2023-06-14
  • Swift 进阶 —— map 和 flatMap的使用
    map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。 集合上使用 map 和 flatMap 先看如下的代码: func getInfos(by...
    99+
    2022-06-02
    Swift map flatMap
  • 详解Java8 Stream Api中map和flatMap操作
    1.前言Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。今天我们来探讨两个 Stream 中间操作 map(Function...
    99+
    2017-11-17
    java入门 java map flatMap
  • Java中Scanner用法
    Java中Scanner用法 Scanner可以实现程序和人的交互,用户可以利用键盘进行输入。 不同类型的输入: String s=sc.next(); //接受字符串数据System.out.pr...
    99+
    2023-09-29
    java jvm 开发语言
  • java中optional 常用用法
    Java中的Optional是一个容器对象,它可以包含一个非空值,也可以为空。它的主要作用是在编写代码时避免空指针异常。 java 8 中Optional的完整用法如下: 1. 创建Optional对象 可以通过of()方法创建一个包含非空...
    99+
    2023-08-16
    java optional
  • java中sleep()的用法
    在Java中,`sleep()`是一个`Thread`类的静态方法,用于使当前线程暂停执行一段指定的时间。它的语法为:```java...
    99+
    2023-09-12
    java
  • Java 中 switch 的用法
    Java 中 switch 的用法 switch 中的表达式的数据的数据类型为 byte, short, int, char, String(jdk > 1.7支持 String 类型) 2、defa...
    99+
    2023-10-20
    java 开发语言 spring
  • Java中scheduleAtFixedRate的用法
    目录scheduleAtFixedRate(task,time,period)scheduleAtFixedRate(task, delay,period)scheduleAtFix...
    99+
    2023-05-17
    Java scheduleAtFixedRate
  • java中forEach的用法
    这篇文章主要讲解了“java中forEach的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中forEach的用法”吧!import java.util.*;impor...
    99+
    2023-06-03
  • Java中synchronized用法汇总
    目录用法简介1、修饰普通方法2、修饰静态方法3、修饰代码块总结在 Java 语言中,保证线程安全性的主要手段是加锁,而 Java 中的锁主要有两种:synchronized 和 Lo...
    99+
    2024-04-02
  • java中方法的调用
    1.静态方法调用静态方法: 用静态方法时通过(类名.方法名)的方法进行调用,当调用方法和被调用的方法在同一类中时,类名可省略,直接通过方法名进行调用; 同时也可以通过对象进行调用,但较为繁琐,一般不使...
    99+
    2023-09-22
    java
  • Java中BigInteger用法小结
    目录一.介绍BigInteger经常使用到的一些函数二、介绍BigInteger的读入方法——nextBigInteger(),从控制台读入一个BigInte...
    99+
    2023-03-07
    java中BigInteger用法 java BigInteger
  • Java中Object用法详解
    目录一. Object简介1. 简介二. 常用方法1. clone()方法1.1 clone方法作用1.2 clone源码分析1.3 Java的浅克隆与深克隆2. hashCode(...
    99+
    2023-05-19
    Java Object用法 Java Object
  • Java中Socket用法详解
    目录1 问题引入1.1 网络架构模型1.1.1 OSI参考模型1.1.2 TCP/IP五层模型1.1.3 各协议层的说明1.2 网络编程中的问题1.3 TCP协议与UDP协议1.3....
    99+
    2024-04-02
  • java中BigDecimal用法详解
    首先,学习一个东西,我们都必须要带着问题去学,这边我分为 【为什么?】【是什么?】【怎么用?】 【为什么要用BigDecimal?】 首先,我们先看一下,下面这个现象 那为什么会出...
    99+
    2024-04-02
  • Java中Character类的用法
    这篇文章主要介绍“Java中Character类的用法”,在日常操作中,相信很多人在Java中Character类的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中Character类的用法”的疑...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作