我正在观看一份有关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());
我不明白为什么第一段代码被称为“不良习惯”。对我来说,它们都实现了相同的目标。
forEach
,而是由于应用了parallel
。我的观点是并行/串行不决定顺序;操作才是决定因素。 - Eugene