Java8新特性 - Stream - 24 - Stream的map与flatMap方法的区别

本文详细介绍了Java Stream API中的map和flatMap方法,通过实例展示了它们的功能和区别。在需求描述中,给出了一组字符串数组,要求按特定规则处理并去重。案例代码分别演示了仅使用map、flatMap+map以及只使用flatMap实现需求的过程,并给出了相应的运行结果。最终实现了将字符串数组转换为不重复的数字列表的目标。
摘要由CSDN通过智能技术生成

0.前言

各位看官,本片文章中的文字描述部分核心,务必通读后再去看代码,否则可能有些吃力

1.方法描述

1.1 map

<R> Stream<R> map(Function<? super T, ? extends R> mapper);
【功能说明】:返回一个包含【给定功能处理结果】的Stream对象。
【举例说明1】 :输入一个字符串“a”,功能方法中将字符串添加了前缀 “perfix_”,则返回的Stream对象中的元素为 :【字符串 :“perfix_a”】;
【举例说明2】:输入一个字符串“a-b-c”,功能方法中将字符串按照'-'进行分割,则返回的Stream对象中的元素为 : 【数组 : ["a","b","c"]】。

1.2 flapMap

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
【功能说明】:返回一个包含【给定功能处理结果的【最底层元素】】的Stream对象。(扁平化处理)
【举例说明】:输入一个字符串“a-b-c”,功能方法中将字符串按照'-'进行分割,则返回的Stream对象中的元素为 : 【三个字符串元素 : “a”,“b”,“c”】,
			不再是分割之后的字符串数组了。
			(当然,这个返回的Stream对象,必须显式的声明出来)
【特点】:flapMap 可以和 map 配合使用,更容易理解。
         当然,单独使用,也是没有问题的。

2.需求描述

存在一个字符串数组 :  String[] strs = {"1-0-0", "2-0-0", "3-0-0","4-0-0","5-0-0","6-0-0"};
要求 : 将字符串数组中的每个元素按照“-”进行分割,然后将分割之后的单个字符去重,最后输出结果;
目标结果 :[1,0,2,3,4,5,6]

3.案例代码

本案例代码中 包含了 map 和 flatMap 两个方法的使用,以增强二者差别的对比

3.1 代码

package com.northcastle.I_stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamTest16FlatMap {
    public static void main(String[] args) {
        String[] strs = {"1-0-0", "2-0-0", "3-0-0","4-0-0","5-0-0","6-0-0"};
       //1.使用map的情况,不能实现需求
        Stream.of(strs)
                .map(s->s.split("-"))
                .distinct()
                .forEach(strings -> System.out.println(Arrays.toString(strings)));

        System.out.println("============");
        
		//2.使用 flapMap + map的方式,将map的结果进行扁平化处理,可以实现需求
        List<String> strList = Stream.of(strs)
                .map(s -> s.split("-"))// map 将字符串分割,形成字符串数组
                .flatMap(strArray ->  Stream.of(strArray)) // 使用普通的Lambda表达式的写法,更好理解
                //.flatMap(Arrays::stream) // 使用 方法引用的写法
                .distinct()
                .collect(Collectors.toList());
        System.out.println(strList);
        System.out.println("============");

		//3.只使用flatMap的方式,也可以实现需求
        List<String> strList02 = Stream.of(strs)
                .flatMap(s -> {
                    String[] splitArray = s.split("-");
                    return Stream.of(splitArray);
                })
                .distinct()
                .collect(Collectors.toList());
        System.out.println(strList);

    }
}

3.2 运行结果

在这里插入图片描述

4.完成

Congratulations!
You are one step closer to success!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值