优点是:
1.原代码表达了多个计算步骤,每一步都起一个语义化的名字,增加了代码的可读性和可维护性。2. 利用Stream API的链式调用,每一步转换都较为简洁。3. 最后的assertThat验证也提高了代码质量。4. 拆分成多行,符合代码排版规范,可读性好。
缺点是:
1.一行代码方式节省了代码行数。2. 减少了代码量,但是牺牲了可读性。3. 不符合代码排版最佳实践。4. 理解和调试都比较困难。5. 不利于代码的可维护性。
@Test
public void stream() {
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
double average = calc(ints);
double streamResult = ints.stream()
.map(i -> new Point2D.Double((double) i % 3, (double) i / 3))
.filter(point -> point.getY() > 1)
.mapToDouble(point -> point.distance(0, 0))
.average()
.orElse(0);
//如何用一行代码来实现,比较一下可读性
assertThat(average, is(streamResult));
}
double streamResult = ints.stream().mapToDouble(i -> new Point2D.Double((double)i%3, (double)i/3).distance(0, 0)).filter(d -> d > 1).average().orElse(0);
学习:Java 业务开发常见错误 100 例学习笔记