使用 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 虽好,但是优缺点也很明显!
优点:
- 代码量看起来很少,很简洁。
- 写代码的效率高。
3. 可以并行处理,充分利用多核CPU的优势。 - 有利于JIT编译器对代码进行优化。
缺点:
- 非并行计算情况下,其计算速度没有比传统的 for 循环快。
- 不容易调试。
- 若其他程序员没有学过 Lambda 表达式,代码不容易让其他语言的程序员看懂。
- 在 Lambda 语句中强制类型转换貌似不方便。
于是,我根据 Comparator 接口中提供的静态方法排序方法,把一些排序代码,改成了下面这样!
xttblogList.sort(Comparator.reverseOrder());
这可能是一种比较折中的办法,但是,没处的排序代码都不一样,会不会太乱了!
: » 吐槽一下 Java 8 Lambda 表达式的优缺点
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/252161.html