• 使用 IntelliJ IDEA 来帮忙
  • 构建你自己的实时模板
    • 连接
    • 分组

  • 《Java 2019 超神之路》
  • 《Dubbo 实现原理与源码解析 —— 精品合集》
  • 《Spring 实现原理与源码解析 —— 精品合集》
  • 《MyBatis 实现原理与源码解析 —— 精品合集》
  • 《Spring MVC 实现原理与源码解析 —— 精品合集》
  • 《Spring Boot 实现原理与源码解析 —— 精品合集》
  • 《数据库实体设计合集》
  • 《Java 面试题 —— 精品合集》
  • 《Java 学习指南 —— 精品合集》

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。接下来我们向组中添加所有数据流相关的实时模板。我经常使用默认的收集器toListtoSetgroupingByjoin,所以我为每个这些方法都创建了新的实时模板。

这一步非常重要。在添加新的实时模板之后,你需要在对话框底部指定合适的上下文。你需要选择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中的实时模板非常灵活且强大。你可以用它来极大提升代码的生产力。你知道实时模板可以拯救生活的其它例子吗?请让我知道!

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

祝编程愉快!

来源:sf.gg/a/1190000006033999

  • 《Java 2019 超神之路》
  • 《Dubbo 实现原理与源码解析 —— 精品合集》
  • 《Spring 实现原理与源码解析 —— 精品合集》
  • 《MyBatis 实现原理与源码解析 —— 精品合集》
  • 《Spring MVC 实现原理与源码解析 —— 精品合集》
  • 《Spring Boot 实现原理与源码解析 —— 精品合集》
  • 《数据库实体设计合集》
  • 《Java 面试题 —— 精品合集》
  • 《Java 学习指南 —— 精品合集》

java8 list 行转列_太赞了,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. java t9 字母组合_太赞了!美团T9终于整理出Java架构之完美设计实战开源文档

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

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

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

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

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

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

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

  7. sql 行转列_想要表格行转列?简单几行Python代码搞定

    前言数据的行转列操作,在实际工作过程中应用非常广泛.由于不同人员.不同部门对数据结构的认识是不大相同的,尤其是从基层人员手里拿到的数据,更是五花八门,横七竖八.比如有这样一张成绩表: 乍一看,好像没毛 ...

  8. java8 list 行转列_Java14 都来了,你还不会用 Java8吗?

    Java 8 于2014年3月18日发布,并且成为主流的 Java,如今,虽然 Java 14 都已经发布了,但是 开发者和公司选择的版本依旧是经久不衰的 Java 8 版本,如果你还不了解这些新特性 ...

  9. java行转列_最近面试 Java 后端开发的感受!

    首发:cnblogs.com/JavaArchitect/p/10011253.html 上周,密集面试了若干位Java后端候选人,工作经验在3到5年间.我的标准其实不复杂(适用90%小小小公司,BA ...

最新文章

  1. discoGAN 论文解读
  2. 第一讲,我们来谈谈:“什么叫做进制”
  3. 网页设计入门--表格
  4. iOS中锁定屏幕的方法
  5. 微课|玩转Python轻松过二级:第2章课后习题解答(3课,79题)
  6. ReactiveCocoa MVVM 学习总结二
  7. python 持续集成 教程_dotnet 部署 github 的 Action 进行持续集成|简明python教程|python入门|python教程...
  8. RTP载荷H264视频流
  9. 2021年G2电站锅炉司炉考试题库及G2电站锅炉司炉考试报名
  10. 一步步的教你安装UChome (UChome 安装教程)
  11. OpenFileDiaog.Filter的使用
  12. IT项目管理 第三章
  13. mysql 多表查询
  14. IDEA突然不能输入中文
  15. three.js + jquery灯光照耀js特效
  16. 74LVC245电平转换电路
  17. 暑假D16 T3 密道(数位DP? 打表找规律)
  18. BUUCTF [GXYCTF2019]Ping Ping Ping 1
  19. 能转16进制的计算机软件,16进制计算器能否完成各种不同进制的转换?
  20. 笨方法学python 习题32-33

热门文章

  1. python以20字符宽居中输出,Python 字符串内置方法(一)
  2. C语言(CED)编写一个程序,求两个字符之间的加减运算。
  3. (六)Linux之设备驱动模型(续)
  4. getline没有与参数列表匹配的重载函数_C++新增基础功能解析—函数重载功能的使用...
  5. 检测php加密方式,一种php加密方式
  6. 浏览器是指在用户计算机上,自考《网页设计与制作》测试题及答案
  7. html文档加载,html加载
  8. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...
  9. atlas安装需要kafka吗_Atlas 2.1.0 实践(2)—— 安装Atlas
  10. MySQL管理工具MySQL Utilities — 如何连接MySQL服务器