当前位置: 首页 > news >正文

JAVA8 map flatmap用法

目录
  • 背景和价值
      • 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.zskr.cn/news/21837.html

相关文章:

  • float
  • 《程序员的修炼之道:从小工到专家》阅读笔记
  • 关于Pytorch深度学习神经网络的读书报告
  • 牛客刷题-Day13
  • 二分图、拓扑与欧拉
  • 每日笔记
  • 实用指南:2025年9月个人工作生活总结
  • 别再用均值填充了!MICE算法教你正确处理缺失数据
  • nginx-1.16.1-2.p01.ky10.sw_64.rpm 安装教程(详细步骤,适用于Kylin V10/申威SW64架构)
  • 感知节点@5@ ESP32+arduino+ 第三个程序FreeRTOS 上 LED灯显示 和 串口打印ASCII表
  • BIG-Bench:大规模语言模型能力的全面评估与挑战 - 详解
  • OAuth/OpenID Connect 渗透测试完全指南
  • Problem K. 置换环(The ICPC online 2025)思路解析 - tsunchi
  • Go 语言和 Tesseract OCR 识别英文数字验证码
  • 2025年10月小程序开发公司最新推荐排行榜,小程序定制开发,电商小程序开发,预订服务小程序开发,活动报名小程序开发!
  • C语言学习——键盘录入
  • 第十五篇
  • Erlang 的英文数字验证码识别系统设计与实现
  • 使用Django从零开始构建一个个人博客系统 - 实践
  • 2025年磨床厂家TOP企业品牌推荐排行榜,平面磨床,外圆磨床,数控平面磨床,数控外圆磨床,7163平面磨床推荐这十家公司!
  • [LangChain] 02. 模型接口
  • 软件工程作业-报告1 - 实践
  • 2025 年 10 月国内加工中心制造商最新推荐排行榜:涵盖立式、卧式、龙门及多规格型号!
  • kali构建PHP_MYSQL
  • 题解:P6755 [BalticOI 2013] Pipes (Day1)
  • 语音合成技术从1秒样本学习表达风格
  • 我的高敏感和家人
  • 对称多项式
  • usb储存之BOT/UAS内核驱动
  • 软件研发 --- 汇编 之 初体验