我正在观看关于Java的演讲,有一次,讲师说:
"可变性是可以的,分享是好的,共享的可变性是魔鬼的工作."
他所指的是以下一段代码,他认为这是一种"极其糟糕的习惯":
//double the even values and put that into a list.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
List<Integer> doubleOfEven = new ArrayList<>();
numbers.stream()
.filter(e -> e % 2 == 0)
.map(e -> e * 2)
.forEach(e -> doubleOfEven.add(e));
Run Code Online (Sandbox Code Playgroud)
然后他继续编写应该使用的代码,即:
List<Integer> doubleOfEven2 =
numbers.stream()
.filter(e -> e % 2 == 0)
.map(e -> e * 2)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
我不明白为什么第一段代码是"坏习惯".对我而言,他们都达到了同样的目标.