java中flatMap用法

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

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

    java官方给出的示例如下:

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

    如下所示的文本:

hello world
this is a test txt
done

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

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

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

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

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

List<Integer> lista = new ArrayList<>();
lista.add(1);
lista.add(3);

List<Integer> listb = new ArrayList<>();
listb.add(2);
listb.add(4);
List<List<Integer>> listc = new ArrayList<>();
listc.add(lista);
listc.add(listb);
System.out.println(listc);
List<Integer> 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<Integer> lista = new ArrayList<>();
        lista.add(1);
        lista.add(3);

        List<Integer> listb = new ArrayList<>();
        listb.add(2);
        listb.add(4);
        List<List<Integer>> listc = new ArrayList<>();
        listc.add(lista);
        listc.add(listb);
        System.out.println(listc);
        List<Integer> listd = listc.stream().flatMap(Collection::stream).collect(Collectors.toList());
        System.out.println(listd);
        try {
            Stream<String> stream = Files.lines(Paths.get("test.txt"));
            // stream.forEach(System.out::println);
            List<String> words = stream.flatMap(line -> Stream.of(line.split(" +"))).collect(Collectors.toList());
            System.out.println(words);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

    运行截图:

java flatmap,java,flatMap,stream,Collection,压平,Function 

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

stream has already been operated upon or closed 

     所以进行流操作,一般都是把所有的流程都以链式写法写在一起,最后得到结果。文章来源地址https://www.toymoban.com/news/detail-787602.html

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

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

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

相关文章

  • 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日
    浏览(46)
  • 十二、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)
  • spark中使用flatmap报错:TypeError: ‘int‘ object is not subscriptable

    菜鸟笔者在运行下面代码时发生了报错: 报错描述如下:  显然这是传入的数据类型发生了错误: 因为我们试图对整数对象执行下标操作,而这是不允许的。 原来flatMap底层通过取下标来展开元素 如果rdd集合里面有非可迭代对象(如int元素)则会报错TypeError: \\\'int\\\' object is n

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

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

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

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

    2024年01月18日
    浏览(46)
  • java中接口Function的用法

    Java 中的 Function 接口是一个函数式接口,它接受一个输入参数,并且返回一个结果。 Function 接口通常用于将一个对象或值转换成另一个对象或值,例如对数据进行加密、解密、格式化等场景。 下面是 Function 接口的基本用法: 定义接口对象: 这个示例代码定义了一个 Function

    2024年02月14日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包