JAVA8 map flatmap用法

news/2025/10/15 21:29:35/文章来源:https://www.cnblogs.com/aibi1/p/19144324

目录
  • 背景和价值
      • 1. map 用法
      • 2. flatMap 用法
      • 核心区别

背景和价值

在Java 8中,mapflatMap是Stream API中常用的中间操作,用于对元素进行转换处理,但它们的应用场景有所不同。

1. map 用法

map方法用于将流中的每个元素通过一个函数转换为另一个对象,最终生成一个包含转换后元素的新流,新流的元素数量与原流相同。

示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class MapExample {public static void main(String[] args) {List<String> words = Arrays.asList("apple", "banana", "cherry");// 将每个字符串转换为其长度List<Integer> wordLengths = words.stream().map(String::length)  // 等价于 s -> s.length().collect(Collectors.toList());System.out.println(wordLengths);  // 输出: [5, 6, 6]}
}

在这个例子中,map(String::length)将流中的每个字符串转换为它的长度,输入流是String类型,输出流是Integer类型。

2. flatMap 用法

flatMap方法用于将流中的每个元素转换为一个流,然后将所有这些流"扁平化"合并成一个单一的流。它适用于处理元素本身是集合或数组的情况。

示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class FlatMapExample {public static void main(String[] args) {List<String> sentences = Arrays.asList("Hello world", "Java 8 stream", "map and flatMap");// 将每个句子拆分成单词,并合并成一个单词流List<String> words = sentences.stream().flatMap(sentence -> Arrays.stream(sentence.split(" "))).collect(Collectors.toList());System.out.println(words);  // 输出: [Hello, world, Java, 8, stream, map, and, flatMap]}
}

在这个例子中:

  • 首先对每个句子调用split(" ")得到字符串数组
  • Arrays.stream()将数组转换为流
  • flatMap将所有这些流合并成一个包含所有单词的流

核心区别

  • mapStream<T> → Stream<R>(一对一转换,元素数量不变)
  • flatMapStream<T> → Stream<R>(一对多转换后再合并,元素数量可能变化)

简单来说,当你的转换函数返回一个单一元素时使用map,当返回一个集合或流时使用flatMap来"扁平化"结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础 课后习题和代码实践

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

【Windows】如何管理电脑磁盘文件,保持简洁 - 教程

【Windows】如何管理电脑磁盘文件,保持简洁 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

范围综述

Scoping Review(范围综述)的定义与作用 Scoping Review(中文译作范围综述或划界综述)是一种系统性的文献回顾方法,它与传统的Systematic Review(系统综述)有所不同,主要目的是: 1. 定义: 范围综述是一种旨在…

低代码软件开发流程

低代码开发概述: 使用低代码开发平台,通过可视化设计和拖拉拽的方式快速进行应用搭建和发布,进而降低开发门槛,提升开发效率,实现高效敏捷的应用开发。 低代码开发的优势: 1.只需关注业务本身 2.快速响应用户需求…

CSP-S模拟30

CSP-S模拟30 垃圾场 A. 灯若辰星 (light) 打表题。 题意就是求第一类、第二类斯特林数 \(\mod 2\) 意义下的值。 Code: #include<bits/stdc++.h> #define int long long using namespace std;const int Size=(1…

2025多校冲刺CSP模拟赛5

T1:小 Z 爱计数(count) 思路: 一道挂大分的签到题。 显然,我们要根据 \(a_i-a_{i-1}\) 值对输入数据进行排序,然后通过 \(a_i-a_{i-1}\) 与\(b_i-b_{i-1}\) 之间的值的比较来判断操作是否合法。这里我们根据 (题…

应用安全 --- 安卓神器 之 入口加密

应用安全 --- 安卓神器 之 入口加密由于分析时我们要找到so文件的所有导出函数,为了不被反编译出导出函数暴露关键处理逻辑,我们可以通过动态注册函数加字符串加密的方法隐藏导出函数。 解决方法: 解密字符串后找到…

读书报告和代码

《神经网络与深度学习:从理论到CIFAR-10实战》读书报告 一、引言 在人工智能蓬勃发展的当下,神经网络作为机器学习领域的核心技术,已在计算机视觉、自然语言处理等诸多领域展现出强大的能力。本次读书报告将围绕神经…

P66实训2

运行代码 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision.datasets import CIFAR10 from torchvision.transforms import ToTensor, Nor…

《程序员的修炼之道:从小工到专家》阅读笔记

《程序员的修炼之道:从小工到专家》并非单纯的技术手册,而是程序员职业成长的指南。它跳出具体编码技巧,聚焦从 “小工” 到 “专家” 的核心素养修炼。 书中提出的 “DRY 原则”“正交性” 等理念,直指开发中的常…

关于Pytorch深度学习神经网络的读书报告

在深度学习领域,卷积神经网络(CNN)凭借其在图像识别、计算机视觉等任务中的卓越表现,成为新手入门深度学习时绕不开的重要知识点。而 PyTorch 作为一款简洁灵活的深度学习框架,为理解和实现 CNN 提供了极大的便利…

牛客刷题-Day13

优先队列、并查集 https://ac.nowcoder.com/acm/contest/22904?from=acdiscuss牛客刷题-Day13 今日刷题:\(1001-1005\) 1002 Running Median 题目描述 For this problem, you will write a program that reads in a …

蛋白表达标签:提升重组蛋白研究与生产的关键工具

蛋白表达标签:提升重组蛋白研究与生产的关键工具 在重组蛋白的生产与应用中,蛋白表达标签已成为不可或缺的工具。它们通过融合到目标蛋白的N端或C端,简化了蛋白的纯化、检测与稳定性管理。对于科研与工业用户而言,…

const int *p和int *const p快速区分

const int *p:其地址可变,内容不可变。个人记法为去掉int为const *p,const修饰*p,而*p又指其内容,所以内容不可变。 int * const p:其内容可变,地址不可变。个人记法为去掉int为*const p,const修饰p,p不可变则…

二分图、拓扑与欧拉

1、二分图匹配问题(判断是否二分图可以使用并查集) `// 邻接表存储图 int n1, n2, m; int h[500], e[100010],ne[100010], idx = 0; //st 标记是否递归找过, match[x]:和 x 编号的男生的编号 int st[510], match[5…

pytorch作业

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt =====================…

pytorch实验题作业

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms import matplotlib.pyplot as plt 数据预处理:标准化+数…

每日笔记

忘了写了,但是没有关系,今天加油,今天学习了还健身了

Zhengrui #3346. DINO

被我暴力干过去了qwq。 你考虑一个事情,打开大样例,点击 .out 文件,发现几乎全是 \(0\),你想一想为什么,本质上是你的 \(mex\) 每增加 \(1\),你的点的数量就会至少翻一倍,也就是说,答案最多是 \(O(\log n)\) 级…

Pytorch深度学习训练

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transforms import matplotlib.pyplot as plt 数据预处理:标准化+数…