JAVA8 map flatmap用法

背景和价值

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

flatmap transformation+flattening,适合嵌套list,或者复杂的数据结构。 flatmap还可以配合distinct做处理
flatMap方法用于将流中的每个元素转换为一个流,然后将所有这些流"扁平化"合并成一个单一的流。它适用于处理元素本身是集合或数组的情况。

  • 将nested list转换为normal list,

在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来"扁平化"结果。

posted @ 2025-10-15 21:28  向着朝阳  阅读(30)  评论(0)    收藏  举报