Java 8 stream流之flatMap

        Leave leave1 = new Leave("1","1",new Date(),CollUtil.newArrayList("A","B"));
        Leave leave2 = new Leave("2","2",new Date(),CollUtil.newArrayList("C","D"));
        Leave leave3 = new Leave("3","3",new Date(),CollUtil.newArrayList("E","F"));
        ArrayList<Leave> leaves = CollUtil.newArrayList(leave1, leave2, leave3);

对于上述代码,如果我想取出第4个参数的集合如何处理呢?在flatMap之前,我所能想到的就是暴力的遍历吧,如下:

        List<String> resultList = new ArrayList<>();
        for (Leave leaf : leaves) {
            resultList.addAll(leaf.getNameList());
        }

这样就将所有的nameList放入一个集合中,但是如果我想用stream流呢?在未了解flatMap前,我可能会用Map,但是map有个问题在于,我想要一个集合,但是Map会生产集合嵌套集合,代码如下:

List<List<String>> resultList = leaves.stream().map(Leave::getNameList).collect(Collectors.toList());

如果我既想用stream,又想要List<String> resultList呢?flatMap闪亮登场:

        List<String> resultList = leaves.stream()
                .flatMap(leave -> leave.getNameList().stream())
                .collect(Collectors.toList());
public static void main(String[] args) {
        ArrayList<String> strings1 = CollUtil.newArrayList("123", "212", "212");
        ArrayList<String> strings2 = CollUtil.newArrayList("abc", "qwe", "qbc");
        List<String> collect = Stream.of(strings1,strings2).flatMap(Collection::stream).collect(Collectors.toList());
    
}

以上flatMap是将相同类型元素合并到一起,既然能合

并到一起,那flatMap能不能将一起的元素拆分开呢?以下是将元素进行拆分:

        ArrayList<String> list = CollUtil.newArrayList("ABC", "DEF", "GHI");
        List<String> collect = list.stream().flatMap(ele -> Stream.of(ele.split(""))).collect(Collectors.toList());

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值