点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | sf.gg/a/1190000006033999

Java8在2014年三月发布,距离现在(2015年三月五号)快有一年了。我们打算将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是你的项目中最常用的终止操作。所以我不能理解为什么不把这些方法直接集成到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。接下来我们向组中添加所有数据流相关的实时模板。我经常使用默认的收集器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中。

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

连接

分组

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

往期推荐

四种常见的系统架构,目前你处于哪个阶段呢?

Spring Boot“内存泄漏”?看看美团大牛是如何排查的

提升系统 10 倍性能的 10 个建议!

Redis 创始人宣布退居二线:我写代码只是为了表达自己!

10 个牛逼的单行代码编程技巧,你会用吗?

「程序猿 DD」星球活动第一期,将在 7 月 9 日晚 20:00 整开放,持续一周

「程序猿 DD」星球是什么?

「程序猿 DD」星球,是一个汇聚互联网技术人的社群。

我们创建于 2017 年,已运行 3 年。这个圈子不贵,但超值!我们励志打造一个垂直服务于技术人的成长类星球!在这里,我们除了要在技术上有所突破,更要在综合认知上有所长进!因此,在本星球中设立 2 大系列精华分享1000 + 个提问的用心回答,覆盖技术各个领域,少讲大道理,只会分享、讨论以及职场心得。

「程序猿 DD」社群的价值是什么?

在星球除了能看到 DD 的分享外,每周三六固定会有专栏干货分享,如:

  • 周三 「#技术人」系列分享技术高手行走江湖的绝技以及职场心得;

  • 周六 「#社会人」系列分享踏入社会切身相关需要知道知识与思维;

在星球里,我们将围绕下面两个话题展开:

「技术人」系列,更新时间:每周三

抛不开的老本行话题,这里会分享各种我见到的觉得不错的分享、讨论以及职场心得。同时,也收录星球中不错的问题讨论,很多讨论放到现在依然可以持续进行,欢迎你的加入!多一点不一样的声音,可能就打开了一种全新的问题解决思路!

「社会人」系列,更新时间:每周六

当我们离开学校踏入社会,我们所要面对的一切都变的复杂起来。我们的关注点需要扩大,因为你已经成为了一名标准的社会人。如果你认为从学生到社会人只需要把原来的学习精力转移到工作精力就好,那么就完全错了。除了工作之外,你有不少知识要补,有不少思维需要转变。这个系列将带着你了解那些可能你平时不去关注,但又与我们切身相关的政策变化等话题。

星球里有技术非常牛逼的一帮人

> Java 劝退师
> JVM 资深研究大佬
> 源码研究系列博主大佬
> 淘宝集团中间件开发大佬
> 支付宝高级设计专家
> 等等

类似这样的人会不断的邀请进来,给大家分享分享他们看到的学到的。


看到一半,那么如何加入「程序猿 DD」星球第一期活动?
心动不如行动,目前优惠活动:早鸟用户(现价 99¥/年,原价 199 ¥/年)

  • 早鸟用户将享受推广期限时折扣,请及时关注当前的最新优惠活动。

  • 支持 3 天无理由退款

  • 优惠在 7 月 9 日晚 20:00 整开放,持续一周


????扫一扫二维码,免费预约

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. 目前,只有IDEA这款神器能把Java8的数据流问题这么完美的解决掉!

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

  5. spring boot 2.0 java8 下 foundError: javax/xml/bind/JAXBException 解决方法

    spring boot 2.0 java8 下 foundError: javax/xml/bind/JAXBException 解决方法 参考文章: (1)spring boot 2.0 java8 ...

  6. Intellij IDEA 重置所有工具栏 Intellij IDEA 中的 Debug 控制台输出窗口不见了的解决办法

    Intellij IDEA 中的 Debug 控制台输出窗口不见了的解决办法 在 Debug 工具窗口,如图点击左侧重置布局图标,你的console窗口就还原了.

  7. IntelliJ IDEA 项目结构旁边出现 0%methods,0% lines covered 解决

    IntelliJ IDEA 项目结构旁边出现 0%methods,0% lines covered 解决   windows 1.选中根目录文件夹     ctrl +  alt + f6弹出如下框, ...

  8. 使用Intellij IDEA 解决Java8的数据流问题

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 翻译: 飞龙 https://segmentfault.com/a ...

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

    来源 | 网络 相信不少胖友的 Lambada 使用的贼 666,今儿来看看 IDEA 在这方面的助力! 神奇在手 天下我有 我们打算将Pondus的所有生产服务器升级到这一新版本.从那时起,我们将大 ...

最新文章

  1. 中科院微生物所王军课题组特别研究助理招聘
  2. C# XML的序列化与反序列化
  3. C# 异步方法的异常处理
  4. Google Guava库必需品
  5. s5pv210——LCD基础理论
  6. Sublime 下配置vim模式 + VintageEx-master下载地址
  7. 是时候研读一波导师的论文--一个简单有效的联合模型
  8. 智能优化算法:JAYA优化算法 -附代码
  9. 在Kali中安装foremost
  10. 七牛云上传的视频通过外链播放黑屏问题
  11. 批量取消腾讯微博关注
  12. 2011微软校园招聘职位一览表
  13. yii mysql gii_YII-快速用gii创建一个简单的yii项目!
  14. 静态路由和动态路由的融会贯通(思科/华为)
  15. java catch 空指针异常_在Java中避免空指针异常(Null Pointer Exception)
  16. 26.gateway的IP 认证拦截,gateway做token验证 流程图(springcloud)
  17. 简单的EasyUI登录界面
  18. ASM027: 汇编常用工具
  19. 50 岁开发者如何绝地求生
  20. [机缘参悟-59]:《素书》-6-安于礼仪[安礼章第六]

热门文章

  1. linux ssh 报错 Write failed: Broken pipe 解决方法
  2. docker 限制cpu使用率
  3. mysql text 最大长度 报错 Row size too large. The maximum row size for the used table type
  4. golang error类型 简介
  5. linux shell mkdosfs 命令用于建立 dos 文件系统
  6. linux shell 使用代理 proxychains 简介
  7. linux wget下载整个ftp目录(含子目录)
  8. linux下Yum的$releasever和$basearch的取值
  9. COOKIE格式与读写相关
  10. OpenStack-MitakaCentos7.2双节点搭建--(二)Keystone(认证服务)