关于stream的flatMap方法简单使用

4 篇文章 0 订阅
2 篇文章 0 订阅

简述

在JDK8开始,列表操作新增了一新特性Stream流式操作,Stream中提供了非常多的API供大家使用,灵活的使用这些API,可以非常的方便且优美的实现我们的代码逻辑;

其中,flatMap()方法也是其中的API,flatMap()简单来说就是将多个stream流合并成一个stream,当然你也可以在合并的时候结合其他的API做一些过滤或者转换之类的,如filter,下面详细阐述一下。

案例

1、先来一个简单的使用案例:

    public static void main(String[] args) {
        List<List<Integer>> lists = new ArrayList<>();
        List<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(3);
        arrayList.add(22);
        arrayList.add(11);
        arrayList.add(44);
        arrayList.add(null);
        arrayList.add(4);
        lists.add(arrayList);
        List<Integer> arrayList2 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList2.add(55);
        lists.add(arrayList2);
        List<Integer> arrayList3 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList3.add(99);
        arrayList3.add(-2);
        lists.add(arrayList3);
      //将子集合抽上来形成一个大集合
        List<Integer> collect = lists.stream().flatMap(item -> item.stream().filter(Objects::nonNull))
                .collect(Collectors.toList());
        System.out.println(collect);
    }
//输出:[1, 3, 22, 11, 44, 4, 1, 3, 22, 11, 44, 4, 55, 1, 3, 22, 11, 44, 4, 99, -2]

如上,除了我判空的处理,其他子元素按先后顺序进入到大集合里;

2、当然也可以直接对收集后的大集合做更多操作,如过滤元素:

    public static void main(String[] args) {
        List<List<Integer>> lists = new ArrayList<>();
        List<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(3);
        arrayList.add(22);
        arrayList.add(11);
        arrayList.add(44);
        arrayList.add(null);
        arrayList.add(4);
        lists.add(arrayList);
        List<Integer> arrayList2 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList2.add(55);
        lists.add(arrayList2);
        List<Integer> arrayList3 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList3.add(99);
        arrayList3.add(-2);
        lists.add(arrayList3);
        Set<Integer> set = new HashSet<>();
        List<Integer> collect = lists.stream().flatMap(item -> item.stream().filter(Objects::nonNull))
          //注意:此filter是大集合上      
          .filter(one -> one > 5)
          .filter(one -> {
                    if (!set.contains(one)) {
                        set.add(one);
                        return true;
                    } else {
                        return false;
                    }
                }).collect(Collectors.toList());
        System.out.println(collect);
    }
    //输出:[22, 11, 44, 55, 99]

如图

当然如果子元素是实体类对象,你还可以做更多操作。
好了,今天分享到这,各位道友有啥分享的可以直接留言交流!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值