【发布时间】:2015-08-20 08:24:40
【问题描述】:
为什么第二个代码(带有流的那个)比第一个更好?
第一:
public static void main(String [] args) {
List<Integer> values = Arrays.asList(1,2,3,4,5,6);
int total = 0;
for(int e : values) {
total += e * 2;
}
第二:
System.out.println(total);
System.out.println(
values.stream()
.map(e-> e*2)
.reduce(0, (c, e)-> c + e));
【问题讨论】:
-
对我来说第一个更容易理解。
-
“为什么代码的第二部分(带有流)比第一部分更好?” 根据 whom?
-
似乎 lambda 表达式开始让人们感到困惑
-
对于经验丰富的 C++ 程序员来说,lambda 是新的,因此不熟悉。当然,如果您已经使用 C++ 编程了一段时间,那么第一个更容易。你习惯了第一个胡言乱语,而不是第二个。如果您一直在编写一些函数式语言,尽管第二个语言也很容易阅读,因为
map和reduce(fold) 是主场。 -
“功能”版本无法比较,因为您已将乘法和加法拆分为单独的步骤,而“命令式”则在一个步骤中完成。此外,您使用不明确的变量
c而不是total。功能版本应该是:values.stream().reduce(0, (total, e)-> total + e*2))
标签: java lambda java-8 java-stream mutation