往期热门文章:

1,《往期精选优秀博文都在这里了!》

2、呕心沥血总结的14张思维导图,教你构建 Python核心知识体系(附高清下载)

3、一份来自亚马逊技术专家的Google面试指南,GitHub收获9.8万星,已翻译成中文

4、支付宝系统架构(内部架构图)

5、牛逼!IDEA 2020 要本土化,真的是全中文了!中国开发者话语权越来越大了

自从Java8在2014年三月发布,距离现在(2020年6月7号)快有6年了。我们打算将Pondus的所有生产服务器升级到这一新版本。从那时起,我们将大部分代码库迁移到lambda表达式、数据流和新的日期API上。我们也会使用Nashorn来把我们的应用中运行时发生改变的部分变成动态脚本。

除了lambda,最实用的特性是新的数据流API。集合操作在任何我见过的代码库中都随处可见。而且对于那些集合操作,数据流是提升代码可读性的好方法。

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

例如,下面的代码对一个字符串集合进行过滤,并创建新的列表:

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

在迁移了300k行代码到数据流之后,我可以说,toList、toSet、和groupingBy是你的项目中关注公众号互联网架构师,回复关键字2T,获取最新架构视频最常用的终止操作。所以我不能理解为什么不把这些方法直接集成到Stream接口上面,这样你就可以直接编写:

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

这在开始看起来是个小缺陷,但是如果你需要一遍又一遍地编写这些代码,它会非常烦人。

有toArray()方法但是没有toList(),所以我真心希望一些便利的收集器可以在Java9中这样添加到Stream接口中。是吧,Brian?ಠ_ಠ

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

无论如何,IntelliJ IDEA声称它是最智能的Java IDE。所以让我们看看如何使用IDEA来解决这一问题。

使用 IntelliJ IDEA 来帮忙

IntelliJ IDEA自带了一个便利的特性,叫做实时模板(Live Template)。如果你还不知道它是什么:实时模板是一些常用代码段的快捷方式。例如,你键入sout并按下TAB键,IDEA就会插入代码段System.out.println()。更多信息请见这里(https://www.jetbrains.com/help/idea/using-live-templates.html)。

如何用实时模板来解决上述问题?实际上我们只需要为所有普遍使用的默认数据流收集器创建我们自己的实时模板。关注公众号互联网架构师,回复关键字2T,获取最新架构视频例如,我们可以创建.toList缩写的实时模板,来自动插入适当的收集器.collect(Collectors.toList())。

下面是它在实际工作中的样子:

构建你自己的实时模板

让我们看看如何自己构建它。首先访问设置(Settings)并在左侧的菜单中选择实时模板。你也可以使用对话框左上角的便利的输入过滤。

下面我们可以通过右侧的+图标创建一个新的组,叫做Stream。接下来我们向组中添加所有数据流相关的实时模板。关注公众号互联网架构师,回复关键字2T,获取最新的架构视频。我经常使用默认的收集器toList、toSet、groupingBy 和 join,所以我为每个这些方法都创建了新的实时模板。

这一步非常重要。在添加新的实时模板之后,你需要在对话框底部指定合适的上下文。你需要选择Java → Other,然后定义缩写、描述和实际的模板代码。

// Abbreviation: .toList
.collect(Collectors.toList())// Abbreviation: .toSet
.collect(Collectors.toSet())// Abbreviation: .join
.collect(Collectors.joining("$END$"))// Abbreviation: .groupBy
.collect(Collectors.groupingBy(e -> $END$))
特殊的变量$END$指定在使用模板之后的光标位置,所以你可以直接在这个位置上打字,例如,定义连接分隔符。

提示:你应该开启"Add unambiguous imports on the fly"(自动添加明确的导入)选项,便于让IDEA自动添加java.util.stream.Collectors的导入语句。选项在Editor → General → Auto Import中。

让我们在实际工作中看看这两个模板:

1、连接

2、分组

Intellij IDEA中的实时模板非常灵活且强大。你可以用它来极大提升代码的生产力。

你知道实时模板可以拯救生活的其它例子吗?

仍然不满意吗?在我的数据流教程中学习所有你想要学到的东西。

祝编程愉快!

作者:飞龙

来源:https://segmentfault.com/a/1190000006033999

另:公众号后台回复【2T】有惊喜礼包!

推荐阅读 ↓↓↓

1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

2.如何才能成为优秀的架构师?

3.从零开始搭建创业公司后台技术栈

4.“37岁,985毕业,年薪50万,被裁掉只用了10分钟”

5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6.副业&接私活必备的 10 个开源项目!

7.你知道哪10大算法统治着全球吗?

8.15张图看懂瞎忙和高效的区别!

太赞了,Intellij IDEA竟然把Java8的数据流问题这么完美的解决掉了!相关推荐

  1. 太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!

    点击关注公众号,Java干货及时送达 来源:sf.gg/a/1190000006033999 使用 IntelliJ IDEA 来帮忙 构建你自己的实时模板 连接 分组 Java8在2014年三月发布 ...

  2. idea java8_太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!...

    使用 IntelliJ IDEA 来帮忙 构建你自己的实时模板连接 分组 Java8在2014年三月发布,距离现在(2015年三月五号)快有一年了.我们打算将Pondus的所有生产服务器升级到这一新版 ...

  3. java8 list 行转列_太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!

    使用 IntelliJ IDEA 来帮忙 构建你自己的实时模板 连接 分组 <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> <Spr ...

  4. Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | sf.gg/a/119000000603399 ...

  5. 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 来源:s ...

  6. java t9 字母组合_太赞了!美团T9终于整理出Java架构之完美设计实战开源文档

    软件架构师是每个程序员职业生涯中内功心法修炼的终极目标.要达到这个目标需要具备"十八般武艺,八十种技巧",本书正是继<Java代码与架构之完美优化--实战经典>< ...

  7. python画画代码大全_太赞了,微软正式推出 Python 零基础教程!

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub!Python 可以说是当今世界最火的编程语言之一了.数据科学家和人工智能从业者们 ...

  8. android快速充电实现_用一个快充头实现苹果安卓同时快充,实在太赞了!

    原标题:用一个快充头实现苹果安卓同时快充,实在太赞了! 随着手机的普及,给手机充电是必不可少的.而对于像我这样拥有多台设备的人来讲,多个充电头来回切换十分麻烦,于是我在购物平台上搜索能适用多台设备的充 ...

  9. python pdf转word 表格_太赞了!Pdf转Word,我用Python 轻松搞定表格和水印!

    原标题:太赞了!Pdf转Word,我用Python 轻松搞定表格和水印! 继上一次为大家推出了将pdf转word之后(卧槽!Pdf转Word用Python轻松搞定!),引起了大家的热烈讨论,我也总结了 ...

  10. android可看电视吗,不要VIP也能看电影,安卓手机这4款APP太赞了!

    原标题:不要VIP也能看电影,安卓手机这4款APP太赞了! 都说现在的人愿意花几百块钱去买衣服,买游戏装备,买化妆品,却不愿愿意花19块钱去充个会员,你是这样的吗? 哈哈,反正我是.尽管马化腾大哥说& ...

最新文章

  1. c语言把文件导入链表,【求解答】c关于把文件数据放进链表,并将链表遍历
  2. dedecms上传图片不自动改名,以利于seo图片优化
  3. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例
  4. NetBeans 7.4 Beta提示警告无效的异常处理
  5. sklearn保存svm分类模型_机器学习100天-Day1601线性支持向量机分类
  6. cuda11+pytorch安装
  7. DeskPins v1.32 绿色汉化版
  8. discuz门户文章增加代码高亮
  9. BP神经网络(算法整体思路及原理+手写公式推导)
  10. 因式分解的常用三种方法
  11. 如何将XML转换为HL7
  12. 上海提取公积金所需材料
  13. 微信公众号消息模板发送
  14. Python 数据处理与分析(六) 设计一个高回报的投资组合(投资回报和风险分析)任务 5:使用Python实现均值-方差组合模型
  15. 巧用宏录制,轻松制作Excel简易查询小系统
  16. JS实现水波涟漪特效
  17. 【Educoder作业】问题求解——while 循环
  18. DVB-S2工作总结
  19. ANFIS学习笔记(一)
  20. jdk8的安装及环境配置

热门文章

  1. js 怎样把定时器弄成同步的
  2. 函数对象、对象、原型
  3. 互融云融资担保系统:助力企业解决融资难题
  4. 2017年——秋招面试总结(网宿、美图)
  5. linux 信号 --- 产生 阻塞 捕捉
  6. 在ASP.NET的母版页中使用图片和超链接,HTML标记和ASP.NET标记的不同
  7. 求解一个flapping问题,双端口可学一个MAC
  8. ios开发自定义Cell分割线(分隔线)选中(点击时)时消失
  9. Ableton Live 11 Suite for Mac(数字音乐音频制作软件)
  10. 中兴2018年上半年业绩惨不忍睹,押宝5G建设能否让其起死回生?