以下文章来源方志朋的博客,回复”666“获面试宝典

相信不少胖友的 Lambda 使用的贼 666,今儿来看看 IDEA 在这方面的助力!

IDEA在手 天下我有

我们打算将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中的实时模板非常灵活且强大。你可以用它来极大提升代码的生产力。你还知道实时模板的其它例子吗?

在这里,我为大家准备了一份2021年最新最全的《史上最简单的java面试题》,这套电子书涵盖了诸多java技术栈的面试知识题,是作者面试BAT大厂的前的总结,作者顺利拿下AT的offer,相信可以帮助大家在最短的时间内复习Java后端的大多数面试题,从而拿到自己心仪的offer。截了张图,大家可以仔细查看左边的菜单栏,覆盖的知识面真的很广,而且质量都很不错。资料获取方法扫描下方二维码
后台回复关键词:BAT
明天见(。・ω・。)

IDEA 解决 Java8 的数据流问题,用过的都说好!!!相关推荐

  1. 使用 IDEA 解决 Java8 的数据流问题,用过的都说好!!!

    相信不少胖友的 Lambda 使用的贼 666,今儿来看看 IDEA 在这方面的助力! IDEA在手 天下我有 我们打算将Pondus的所有生产服务器升级到这一新版本.从那时起,我们将大部分代码库迁移 ...

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

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

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

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

  4. K2 BPM_“流程平台可以解决哪些问题?”,企业关心的都在这里(二)

    当业务进入存量市场,市场萎缩.利润下滑,企业的粗放式发展模式已成为阻碍企业长远经营与发展的短板,在此形势下,由传统的"粗放式"发展向"精细化"转型,成为企业升级 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. jquery 选择时间(小时)区间(四)
  2. python xpath语法-Python爬虫之XPath语法和lxml库的用法
  3. [转]我们需要IQ吗?--敬以此文献给和我一样迷茫,浮躁的人,共勉!
  4. menu什么意思中文意思_vigorous什么意思
  5. ASP.NET MVC 4中如何为不同的浏览器自适应布局和视图
  6. java akka_用于大型事件处理的Akka Java
  7. Android wifi驱动的移植 realtek 8188
  8. 一天学会php(下)
  9. c++ 求2-100内的素数问题
  10. 手机照片脑补成超大画幅,这个GAN想象力惊人 | Keras实现
  11. 如何提高员工的能动性,体现员工的自我价值
  12. 交易系统典藏书籍总汇以及系统交易、程序化交易等经典资料收藏
  13. 2020年电工(技师)证考试及电工(技师)模拟考试软件
  14. Win11怎么进行长截图?Win11长截图的方法
  15. 建立windows文件夹快捷方式
  16. Edge浏览器检查更新时出错: 无法创建该组件(错误代码 3: 0x80004002 -- system level)如何更新
  17. Calibre中使用DeDRM插件进行Kindle电子书解锁
  18. 10个实用技巧让你的 Vue 代码更优雅
  19. 你会刷牙吗?图解正确刷牙方法
  20. Debian11.5和Ubuntu22.04安装fcitx5中文输入法(五笔拼音)

热门文章

  1. Machine Learning Algorithm
  2. 深入理解C++中public、protected及private用法
  3. Python Socket请求网站获取数据
  4. Win10系列:VC++调用自定义组件1
  5. Python将MySQL表数据写入excel
  6. Web App、Hybrid App与Native App的设计差异
  7. oracle执行计划连接方式
  8. COJN 0575 800601滑雪
  9. Java学习笔记(二一)——Java 泛型
  10. Tomcat官方文档关于数据源配置的内容