Java 8实战-Stream map VS flatMap

Java 8实战--Stream流的使用
1、Map--对流中每一个元素进行处理
2、flatMap--流扁平化,让你把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流

实践代码如下:

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

public class TestStreamMap
{
    private static void testMap(List<String> strList)
    {
        // 返回的是String[],所以去重不正确
        List<String[]> ret = strList.stream()
                        .map(str -> str.split(""))
                        .distinct()
                        .collect(Collectors.toList());
        // print
        ret.stream().forEach(strArr -> System.out.println(Arrays.asList(strArr).toString()));
    }
    
    private static void testFlatMap(List<String> strList)
    {
        List<String> ret = strList.stream()
                        .map(str -> str.split(""))
                        // 可以使每个数组变成一个单独的流
                        // .map(Arrays::stream)
                        // 将各个生成流扁平化为单个流,flatmap方法让你把一个流中的每个值都换成另一个流,然后把所有的流连接起来成为一个流
                        .flatMap(Arrays::stream) 
                        .distinct()
                        // 字符串连接 Collectors.joining()
                        .collect(Collectors.toList());
        System.out.println(ret.toString());
    }
    
    /**
     * 给定两个数字列表,如何返回所有的数对呢?
     * 例如,给定列表[1, 2, 3]和列表[3, 4],应该返回
     * [(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]
     */
    private static void testNumberArr()
    {
        List<Integer> numbers1 = Arrays.asList(1, 2, 3);
        List<Integer> numbers2 = Arrays.asList(3, 4);
        /**
        List<int[]> pairs = numbers1.stream()
                        .flatMap(i -> numbers2.stream().map(j -> new int[]{ i, j }))
                        .collect(Collectors.toList());
        // 打印单个元素
        pairs.stream().flatMapToInt(Arrays::stream).forEach(System.out::println);
        // output: 1 3 1 4 2 3 2 4 3 3 3 4
        */
        List<Integer[]> pairs = numbers1.stream()
                        .flatMap(i -> numbers2.stream().map(j -> new Integer[]{ i, j }))
                        .collect(Collectors.toList());
        pairs.stream().forEach(numberArr -> System.out.println(Arrays.asList(numberArr).toString()));
        
    }
    
    public static void main(String[] args)
    {
        String[] strArr = {"hello", "world"};
        // List<String> strL = new ArrayList<>(); // <>运算符
        List<String> strL = Arrays.asList(strArr);
        testMap(strL);
        testFlatMap(strL);
        testNumberArr();
    }

}

输出:

[h, e, l, l, o]
[w, o, r, l, d]
[h, e, l, o, w, r, d]
[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 3]
[3, 4]

参考书籍:

《Java8实战》

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值