爽的上天的lambda,你会用?牛,不妨看看你用过没

简介: 最近在业务代码中写了一些没用过的lambda表达式,今天放出来一个例子:看一下我用的那个lambda?

最近在业务代码中写了一些没用过的lambda表达式,今天放出来一个例子:看一下我用的那个lambda?

stream.collect()
<R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner);

官方解释!->29.png

个人大白话解释!->

第一个匿名函数用来创建一个最终的容器

第二个函数用来创建一个容器和stream流的每一项进行处理,放入这个容器里

第三个函数用来将,每一个容器全部装到一个容器里

上业务代码{

        //权限页面LIst
        List<AppDirectoryPageVo> appDirectoryPageVos = new ArrayList<>();
        if (Objects.nonNull(one) && StringUtils.isNotEmpty(one.getAppDirectory())) {
            //使用lambda表达式  <R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner); 生成应用页面目录list
            appDirectoryPageVos.addAll(
                    Arrays.stream(one.getAppDirectory().split(",")).collect(
                            //生成一个容器
                            new Supplier<List<AppDirectoryPageVo>>() {
                                @Override
                                public List<AppDirectoryPageVo> get() {
                                    return new ArrayList<>();
                                }
                            },
                            //将每一个目录VO装入单独List对象
                            new BiConsumer<List<AppDirectoryPageVo>, String>() {
                                @Override
                                public void accept(List<AppDirectoryPageVo> appDirectoryPageVoList, String appDirectory) {
                                    AppDirectoryPageVo json = new AppDirectoryPageVo();
                                    json.setDirectory(appDirectory);
                                    appDirectoryPageVoList.add(json);
                                }
                            },
                            //将每一个容器和到一个容器
                            new BiConsumer<List<AppDirectoryPageVo>, List<AppDirectoryPageVo>>() {
                                @Override
                                public void accept(List<AppDirectoryPageVo> appDirectoryPageVoList, List<AppDirectoryPageVo> appDirectoryPageVoList2) {
                                    appDirectoryPageVoList.addAll(appDirectoryPageVoList2);
                                }
                            })
            );
        }

}

这个是我第一次写出来的代码,又臭又长,但是加上我的注释,就能理解了,再看一下我配合IDEA提示优化的代码,我其实不太喜欢,可读性太低了

        //权限页面LIst
        List<AppDirectoryPageVo> appDirectoryPageVos = new ArrayList<>();
        if (Objects.nonNull(one) && StringUtils.isNotEmpty(one.getAppDirectory())) {
            //使用lambda表达式  <R> R collect(Supplier<R> supplier,BiConsumer<R, ? super T> accumulator,BiConsumer<R, R> combiner); 生成应用页面目录list
            appDirectoryPageVos.addAll(
                    Arrays.stream(one.getAppDirectory().split(",")).collect(
                            //生成一个容器
                            (Supplier<List<AppDirectoryPageVo>>) ArrayList::new,
                            //将每一个目录VO装入单独List对象
                            (appDirectoryPageVoList, appDirectory) -> {
                                AppDirectoryPageVo json = new AppDirectoryPageVo();
                                json.setDirectory(appDirectory);
                                appDirectoryPageVoList.add(json);
                            },
                            //将每一个容器和到一个容器
                            List::addAll)
            );
        }

这里就介绍完了我的使用过程,你还有那些不懂嫩?

再来一些教程把,有的是沾别人的,其实你们按我的第一个例子,又臭又长的又有注释的去用,稍微改改自己的业务

解读:

Supplier 提供容器,供后续accumulator和combiner使用

accumulator 处理Supplier提供的T容器和stream中的元素U

combiner 用来将所有accumulator处理后的结果T进行处理

目录
相关文章
|
移动开发 JavaScript 小程序
uView Line 线条
uView Line 线条
183 0
|
存储 人工智能 搜索推荐
详解MySQL字符集和Collation
MySQL支持了很多Charset与Collation,并且允许用户在连接、Server、库、表、列、字面量多个层次上进行精细化配置,这有时会让用户眼花缭乱。本文对相关概念、语法、系统变量、影响范围都进行了详细介绍,并且列举了有可能让字符串发生字符集转换的情况,以及来自不同字符集的字符串进行比较等操作时遵循的规则。对于最常用的基于Unicode的字符集,本文介绍了Unicode标准与MySQL中各个字符集的关系,尤其详细介绍了当前版本(8.0.34)默认字符集utf8mb4。
|
10月前
|
弹性计算 运维 监控
自动化AutoTalk第十一期-应知必会的自动化工具之阿里云配额中心
本次分享主题为“应知必会的自动化工具之阿里云配额中心”,课程围绕三个方面展开:1) 认识配额及其作用;2) 配额管理的意义与方法;3) 阿里云配额中心的功能和使用场景。通过学习,了解如何有效管理和监控配额,避免资源限制影响业务,并实现自动化集成,提升运维效率。
214 10
|
IDE 开发工具 Python
在pycharm中使用jupyter
本文介绍了如何在PyCharm中安装并使用Jupyter Notebook,包括在PyCharm中新建Jupyter Notebook、配置Jupyter Server以及利用PyCharm的高级功能进行更高效的编程和调试。
在pycharm中使用jupyter
|
12月前
|
人工智能 自然语言处理 人机交互
MagicQuill:4天斩获千颗 Star,登上Huggingface趋势榜榜首的AI P图神器
MagicQuill通过结合编辑处理器、绘画助手和创意收集器三大功能,解决了图片精准、高效编辑的难题,用户可以通过三种简单的魔法画笔(添加、删除和上色)来编辑图片。
MagicQuill:4天斩获千颗 Star,登上Huggingface趋势榜榜首的AI P图神器
Proxifier是什么?如何配置使用?
【10月更文挑战第3天】Proxifier是什么?如何配置使用?
2723 1
|
机器学习/深度学习 数据采集 存储
机器学习在推荐系统中的应用
【7月更文挑战第31天】随着机器学习技术的不断发展和普及,推荐系统在电子商务、社交媒体、新闻资讯等领域的应用越来越广泛。机器学习算法的应用为推荐系统优化提供了全新的思路和方法,使得推荐系统能够更加智能化和个性化地为用户提供服务。未来,随着数据量的不断增加和算法的不断创新,推荐系统将会变得更加精准和高效,为用户带来更加优质的体验。
|
数据采集 人工智能 监控
客户管理和运营太难了?瓴羊×阿里云上的Salesforce给出更符合中国企业体质的解法
在数字化时代,消费者行为变化和数据爆炸性增长促使企业转向CRM升级。瓴羊通过与Salesforce合作,推出Quick Service和Quick Audience工具,应对多渠道数据整合与个性化营销的挑战。Quick Audience增强CRM的数据收集和分析,提供精准客户画像,而Quick Service提升客服效率,通过AI增强客服交互。这两款工具预集成于阿里云上的Salesforce,助力企业实现更高效、精准的客户管理和营销。随着新技术发展,AI等工具将在客户管理中发挥更大作用,推动商业模式创新。
271 0
|
存储 安全 Cloud Native
如何在银行核心系统中安全地搭建微服务架构?
微服务作为现代互联网应用的主流架构风格,已在很多行业应用中获得广泛的成功,而银行核心系统由于其复杂性和风险敏感性,主流架构依然在从单体式 SOA 到真正的微服务分布式架构的转型期。
588 1
|
存储 缓存 搜索推荐
深入理解Elasticsearch倒排索引原理与优化策略
总之,Elasticsearch的倒排索引是其高效全文搜索的核心。为了提高性能和可伸缩性,Elasticsearch采用了多种优化策略,包括压缩、分片、合并、位集合和近实时搜索等。这些策略使Elasticsearch成为处理大规模文本数据的强大工具。
1053 0