点击关注公众号,Java干货及时送达

来源:sf.gg/a/1190000006033999

  • 使用 IntelliJ IDEA 来帮忙

  • 构建你自己的实时模板

    • 连接

    • 分组


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

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

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

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

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

在迁移了300k行代码到数据流之后,我可以说,toListtoSet、和groupingBy是你的项目中最常用的终止操作。所以我不能理解为什么不把这些方法直接集成到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()。更多信息请见这里。

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

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

构建你自己的实时模板

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

下面我们可以通过右侧的+图标创建一个新的组,叫做Stream。接下来我们向组中添加所有数据流相关的实时模板。我经常使用默认的收集器toListtoSetgroupingBy 和 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中。

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

连接

分组

Intellij IDEA中的实时模板非常灵活且强大。你可以用它来极大提升代码的生产力。你知道实时模板可以拯救生活的其它例子吗?请让我知道!

热门内容:干掉Dubbo !这个开发框架就是后端王者!绝了!这款工具让SpringBoot不再需要Controller、Service、DAO、Mapper!线上服务 CPU 100%?一键定位 so easy!史上最强Redis6.0,世界排名第一!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. php安装模式mod_php和Fastcgi的选择与对比
  2. activity切换交互动画
  3. 广西大学计算机科学与技术中法,广西大学
  4. html action能跨域么,ASP.NET MVC 中设置跨域
  5. js中if表达式判断规则
  6. c语言中空格字符怎么表示_C语言中常用的字符串操作函数
  7. 大数据时代的语音识别,方言也不怕?
  8. 阿里云 短信 sdk 导致strtotime时间戳转换错误 相差8小时
  9. Windows10家庭版远程桌面登录——RDPWrap
  10. UnRaid配置文件、启动U盘定时备份方案
  11. js判断数组是否相等的方法
  12. 云计算与大数据概论(1) 云计算,大数据是什么
  13. 线性代数常用名词详解1
  14. 为什么现在java这么难找,现在java工作难找吗
  15. HDU 3518 HDU 4416【后缀自动机len的使用】
  16. 2023年美国大学生数学建模竞赛(春季赛)
  17. 消费机 mysql_消费机软件主要构成
  18. minecraft java版皮肤查看_厨师长教你:提取 Minecraft 基岩版付费皮肤并用于 Java 版...
  19. 让绩效管理落到实处的七个要点
  20. [回忆][职场]几个不愉快的求职经验,与我人生的奇遇

热门文章

  1. L1-016 查验身份证(2016年天梯赛模拟赛第8题)
  2. springboot 学习笔记(三)
  3. c/c++ 拷贝控制 构造函数的问题
  4. 读书笔记--C陷阱与缺陷(三)
  5. as3绕过策略文件给视频截图
  6. ASP.NET将原始图片按照指定尺寸等比例缩放显示图片
  7. [转]使用设计模式改善程序结构(二)
  8. 【组队学习】【33期】Scratch(一级)
  9. 【组队学习】【29期】11. 青少年编程(Scratch 二级)
  10. 技术图文:位运算技术在求解算法题中的应用