java8 stream map和flatMap

map
定义:

/**
 * 映射 
 * @param mapper 转换逻辑 T->R
 * @return 一个新的流
 * */
<R> Stream<R> map(Function<? super T, ? extends R> mapper);

元素转化,可以将流转成另一种类型的流。
示例:

List<String> strs = Arrays.asList("1", "23");
List<Integer> integers = strs.stream()
 				.map(s -> Integer.parseInt(s))
                .collect(Collectors.toList()); //[1, 23]

mapToInt
定义:

/**
 * 映射成int
 * @param mapper 转换逻辑 T->int类型的值
 * @return int流
 * */
IntStream mapToInt(ToIntFunction<? super T> mapper);

接收将成员变量转化成int的方法,返回int流,可以用于统计。
示例:

//统计总数
Integer sum = integers.stream().mapToInt(Integer::intValue).sum(); //24
Integer sum2 = integers.stream().mapToInt(i -> i.intValue()).sum();//24
Integer sum3 = strs.stream().mapToInt(str -> Integer.parseInt(str)).sum();//24

flatMap

/**
 * 扁平化,将多层流合并成一层处理
 * 适用于多重循环统计
 * @param mapper 转换逻辑 T->int类型的流
 * @return int流
 * */
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
Map<String, List<Integer>> map = new HashMap<>();
        map.put("aaa", integers);
        map.put("bbb", integers);
map.values().stream()
                //循环,元素是list,将list转换成流
                .flatMap(list -> list.stream())
                //将所有元素的流和并后操作
                .forEach(i -> System.out.println(i));

在这里插入图片描述

flatMapToInt
定义:

/**
 * 扁平化,将多层int流合并成一个int流
 * 适用于多重循环统计
 * @param mapper 转换逻辑 T->int类型的流
 * @return int流
 * */
IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);

示例:


Integer sums = map.values().stream()
        //一层循环,元素是list,将list转换成int流
        .flatMapToInt(list -> list.stream()
                //二层循环,元素是Integer
                .mapToInt(Integer::intValue))
        .sum(); //48
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值