吐槽一下 Java 8 Lambda 表达式的优缺点

JAVA herman 839浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
饿了么大量招人,我内推!Java 方向!薪资不设上限,工作年龄不限!工作地点限魔都,可电话面试!简历,发我微信:codedq
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

使用 Java 8 有很长的一段时间了,对它的 Lambda 表达式爱不释手,但是最近发现它的缺点也不少!

原本项目跑的是很顺利的,直到有一天改了某个需求,随手把这个任务分给了其他新同事,谁知新同事看不懂 Lambda,源码阅读起来太困难了!我们先从一个例子开始来说,它为什么让我们难以维护了!

List<String> xttblogList = Arrays.asList("www", "xttblog", "ilove1212", "com");
Collections.sort(xttblogList, new Comparator<String>() {
    @Override
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
});

单看这个排序,写的很溜,非常的熟悉。但是我手贱,顺便用一下 Lambda,于是这段排序代码,被我改成了下面这个样子!

Collections.sort(xttblogList, (String a, String b) -> {
    return b.compareTo(a);
});

这样看起来也很简洁,但是有一天加班,我又看到同样的排序场景了,我又对其他代码做了进一步的优化!

Collections.sort(xttblogList, (String a, String b) -> b.compareTo(a));

我以为这样就是最完美的,谁知道上周一个同学给我截了一段代码,我顺便看到,别人的排序是这样写的!

xttblogList.sort((a, b) -> b.compareTo(a));

就这样,我把后来新需要排序的代码都改成了这样,直到最近一个新同事反映,这种代码太难阅读了,太难维护了,于是我开始反思了!

Lambda 虽好,但是优缺点也很明显!

优点:

  1. 代码量看起来很少,很简洁。
  2. 写代码的效率高。
    3. 可以并行处理,充分利用多核CPU的优势。
  3. 有利于JIT编译器对代码进行优化。

缺点:

  1. 非并行计算情况下,其计算速度没有比传统的 for 循环快。
  2. 不容易调试。
  3. 若其他程序员没有学过 Lambda 表达式,代码不容易让其他语言的程序员看懂。
  4. 在 Lambda 语句中强制类型转换貌似不方便。

于是,我根据 Comparator 接口中提供的静态方法排序方法,把一些排序代码,改成了下面这样!

xttblogList.sort(Comparator.reverseOrder());

这可能是一种比较折中的办法,但是,没处的排序代码都不一样,会不会太乱了!

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 吐槽一下 Java 8 Lambda 表达式的优缺点