为什么共享可变性不好?对第一个示例代码段的说明对第二个示例代码段的说明
我正在看一个关于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));
然后,他继续编写应该使用的代码,即:
List<Integer> doubleOfEven2 =
numbers.stream()
.filter(e -> e % 2 == 0)
.map(e -> e * 2)
.collect(toList());
我不明白为什么第一段代码是“坏习惯”。对我来说,他们都实现了相同的目标。