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

0.前言

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

1.方法描述

1.1 map

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

1.2 flapMap

 Stream flatMap(Function> 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 运行结果

Java8新特性 - Stream - 24 - Stream的map与flatMap方法的区别_第1张图片

4.完成

Congratulations!
You are one step closer to success!

你可能感兴趣的:(JAVA基础篇,java,Java8新特性,Stream,flatMap,map)