栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于stream的flatMap方法简单使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于stream的flatMap方法简单使用

简述

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

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

案例

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

    public static void main(String[] args) {
        List> lists = new ArrayList<>();
        List 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 arrayList2 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList2.add(55);
        lists.add(arrayList2);
        List arrayList3 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList3.add(99);
        arrayList3.add(-2);
        lists.add(arrayList3);
      //将子集合抽上来形成一个大集合
        List 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> lists = new ArrayList<>();
        List 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 arrayList2 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList2.add(55);
        lists.add(arrayList2);
        List arrayList3 = JSON.parseArray(JSON.toJSONString(arrayList), Integer.class);
        arrayList3.add(99);
        arrayList3.add(-2);
        lists.add(arrayList3);
        Set set = new HashSet<>();
        List 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]

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号