使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!

沙海 2021年4月12日05:22:40杂谈 Java评论21字数 2863阅读9分32秒阅读模式
摘要

速读摘要

速读摘要文章源自JAVA秀-https://www.javaxiu.com/11039.html

我们也会使用Nashorn来把我们的应用中运行时发生改变的部分变成动态脚本。而且对于那些集合操作,数据流是提升代码可读性的好方法。和join,所以我为每个这些方法都创建了新的实时模板。在添加新的实时模板之后,你需要在对话框底部指定合适的上下文。MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。文章源自JAVA秀-https://www.javaxiu.com/11039.html

原文约 3626 | 图片 10 | 建议阅读 8 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!

点击关注 ? Java基基 文章源自JAVA秀-https://www.javaxiu.com/11039.html

点击上方“Java基基”,选择“设为星标”文章源自JAVA秀-https://www.javaxiu.com/11039.html

做积极的人,而不是积极废人!文章源自JAVA秀-https://www.javaxiu.com/11039.html

文章源自JAVA秀-https://www.javaxiu.com/11039.html

源码精品专栏文章源自JAVA秀-https://www.javaxiu.com/11039.html

 文章源自JAVA秀-https://www.javaxiu.com/11039.html

文章源自JAVA秀-https://www.javaxiu.com/11039.html

来源:网络文章源自JAVA秀-https://www.javaxiu.com/11039.html

大家好,我是基基。文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

相信不少胖友的 Lambada 使用的贼 666,今儿来看看 IDEA 在这方面的助力!文章源自JAVA秀-https://www.javaxiu.com/11039.html

神奇在手文章源自JAVA秀-https://www.javaxiu.com/11039.html

天下我有文章源自JAVA秀-https://www.javaxiu.com/11039.html

我们打算将Pondus的所有生产服务器升级到这一新版本。从那时起,我们将大部分代码库迁移到lambda表达式、数据流和新的日期API上。我们也会使用Nashorn来把我们的应用中运行时发生改变的部分变成动态脚本。文章源自JAVA秀-https://www.javaxiu.com/11039.html

除了lambda,最实用的特性是新的数据流API。集合操作在任何我见过的代码库中都随处可见。而且对于那些集合操作,数据流是提升代码可读性的好方法。文章源自JAVA秀-https://www.javaxiu.com/11039.html

但是一件关于数据流的事情十分令我困扰:数据流只提供了几个终止操作,例如reduce和findFirst属于直接操作,其它的只能通过collect来访问。工具类Collctors提供了一些便利的收集器,例如toList、toSet、joining和groupingBy。文章源自JAVA秀-https://www.javaxiu.com/11039.html

例如,下面的代码对一个字符串集合进行过滤,并创建新的列表:文章源自JAVA秀-https://www.javaxiu.com/11039.html

stringCollection    .stream()    .filter(e -> e.startsWith("a"))    .collect(Collectors.toList());

在迁移了300k行代码到数据流之后,我可以说,toList、toSet、和groupingBy是你的项目中最常用的终止操作。所以我不能理解为什么不把这些方法直接集成到Stream接口上面,这样你就可以直接编写:文章源自JAVA秀-https://www.javaxiu.com/11039.html

stringCollection    .stream()    .filter(e -> e.startsWith("a"))    .toList();

这在开始看起来是个小缺陷,但是如果你需要一遍又一遍地编写这些代码,它会非常烦人。文章源自JAVA秀-https://www.javaxiu.com/11039.html

有toArray()方法但是没有toList(),所以我真心希望一些便利的收集器可以在Java9中这样添加到Stream接口中。是吧,Brian?ಠ_ಠ文章源自JAVA秀-https://www.javaxiu.com/11039.html

注:Stream.js是浏览器上的Java 8 数据流API的JavaScript接口,并解决了上述问题。所有重要的终止操作都可以直接在流上访问,十分方便。详情请见API文档。文章源自JAVA秀-https://www.javaxiu.com/11039.html

无论如何,IntelliJ IDEA声称它是最智能的Java IDE。所以让我们看看如何使用IDEA来解决这一问题。文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IntelliJ IDEA 来帮忙

IntelliJ IDEA自带了一个便利的特性,叫做实时模板(Live Template)。如果你还不知道它是什么:实时模板是一些常用代码段的快捷方式。 例如,你键入sout并按下TAB键,IDEA就会插入代码段System.out.println()。文章源自JAVA秀-https://www.javaxiu.com/11039.html

如何用实时模板来解决上述问题?实际上我们只需要为所有普遍使用的默认数据流收集器创建我们自己的实时模板。例如,我们可以创建.toList缩写的实时模板,来自动插入适当的收集器.collect(Collectors.toList())。文章源自JAVA秀-https://www.javaxiu.com/11039.html

下面是它在实际工作中的样子:文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

图片文章源自JAVA秀-https://www.javaxiu.com/11039.html

构建你自己的实时模板

让我们看看如何自己构建它。首先访问设置(Settings)并在左侧的菜单中选择实时模板。你也可以使用对话框左上角的便利的输入过滤。文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

图片文章源自JAVA秀-https://www.javaxiu.com/11039.html

下面我们可以通过右侧的+图标创建一个新的组,叫做Stream。接下来我们向组中添加所有数据流相关的实时模板。我经常使用默认的收集器toList、toSet、groupingBy 和 join,所以我为每个这些方法都创建了新的实时模板。文章源自JAVA秀-https://www.javaxiu.com/11039.html

这一步非常重要。在添加新的实时模板之后,你需要在对话框底部指定合适的上下文。你需要选择Java → Other,然后定义缩写、描述和实际的模板代码。文章源自JAVA秀-https://www.javaxiu.com/11039.html

// Abbreviation: .toList.collect(Collectors.toList())// Abbreviation: .toSet.collect(Collectors.toSet())// Abbreviation: .join.collect(Collectors.joining("$END$"))// Abbreviation: .groupBy.collect(Collectors.groupingBy(e -> $END$))

特殊的变量$END$指定在使用模板之后的光标位置,所以你可以直接在这个位置上打字,例如,定义连接分隔符。文章源自JAVA秀-https://www.javaxiu.com/11039.html

提示:你应该开启"Add unambiguous imports on the fly"(自动添加明确的导入)选项,便于让IDEA自动添加java.util.stream.Collectors的导入语句。选项在Editor → General → Auto Import中。文章源自JAVA秀-https://www.javaxiu.com/11039.html

让我们在实际工作中看看这两个模板:文章源自JAVA秀-https://www.javaxiu.com/11039.html

连接

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

图片文章源自JAVA秀-https://www.javaxiu.com/11039.html

分组

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

图片文章源自JAVA秀-https://www.javaxiu.com/11039.html

Intellij IDEA中的实时模板非常灵活且强大。你可以用它来极大提升代码的生产力。你知道实时模板可以拯救生活的其它例子吗?欢迎留言文章源自JAVA秀-https://www.javaxiu.com/11039.html

仍然不满意吗?在我的数据流教程中学习所有你想要学到的东西。文章源自JAVA秀-https://www.javaxiu.com/11039.html

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

已在知识星球更新源码解析如下:文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

使用 IDEA 解决 Java8 的数据流问题,极大提升生产力!!文章源自JAVA秀-https://www.javaxiu.com/11039.html

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。文章源自JAVA秀-https://www.javaxiu.com/11039.html

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。文章源自JAVA秀-https://www.javaxiu.com/11039.html

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。文章源自JAVA秀-https://www.javaxiu.com/11039.html

文章源自JAVA秀-https://www.javaxiu.com/11039.html

文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*)
文章源自JAVA秀-https://www.javaxiu.com/11039.html

阅读原文文章源自JAVA秀-https://www.javaxiu.com/11039.html

继续阅读
速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
weinxin
资源分享QQ群
本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定