爽的上天的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进行处理

目录
相关文章
|
12天前
代码之舞:我的编程之旅
【7月更文挑战第3天】在编程的世界里,每一行代码都如同舞步,精确而优雅。本文将分享我在编程旅程中的技术感悟与成长,从最初的迷茫到逐渐找到自己的节奏,我学会了如何让代码跳跃、旋转,最终编织成一曲动人的舞蹈。这不仅是技术上的进步,更是对编程艺术的深刻理解。
|
2月前
|
数据采集 数据挖掘 Python
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
|
2月前
|
JavaScript 前端开发 Java
万万没想到,'this'关键字的真正威力
万万没想到,'this'关键字的真正威力
24 1
|
2月前
|
IDE 安全 程序员
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
20 1
|
算法 程序员 数据安全/隐私保护
2022 年终总结|怎样写出一篇还不错的文章
2022 年终总结|怎样写出一篇还不错的文章
64 0
|
程序员 Python
【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
最近在各大社交平台看到好多圣诞树,看到大佬们画的圣诞树一个比一个精致,我也特别想尝试画一棵特别的圣诞树。下面是我画的一棵简易的圣诞树,虽然和网络上大佬们的圣诞树相比不是很精致,但是对于萌新们来说,画这样一棵简易的圣诞树还是非常轻松的。 ps:重要的不是圣诞树,重要的是你的心意哦~
202 0
【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员
课外闲谈10.函数重载的二义性
课外闲谈10.函数重载的二义性
73 0
使用 Lambda 表达式的正确姿势,写得太好了叭
Lambda 表达式非常方便,在项目中一般在 stream 编程中用得比较多。 List<Student> studentList = gen(); Map<String, Student> map = studentList .stream() .collect(Collectors.toMap(Student::getId, a -> a, (a, b) -> a)); 理解一个 Lambda 表达式就三步: 1. 确认 Lambda 表达式的类型 2. 找到要实现的方法 3. 实现这个方法 就这三步,没其他的了。而每一步,都非常非常简单,以至于我分别展开讲一下,你就懂了。
|
前端开发 JavaScript C语言
带你读书之“红宝书”:第十章 函数⑧
带你读书之“红宝书”:第十章 函数⑧
70 0
带你读书之“红宝书”:第十章 函数⑧
|
前端开发 C语言
带你读书之“红宝书”:第十章 函数⑨
带你读书之“红宝书”:第十章 函数⑨
81 0
带你读书之“红宝书”:第十章 函数⑨