6.9 练习

  1. 例6-10中的代码顺序求流中元素的平方和,将其改为并行处理。

例6-10 顺序求列表中数字的平方和

  1. public static int sequentialSumOfSquares(IntStream range) {
  2. return range.map(x -> x * x)
  3. .sum();
  4. }
  1. 例6-11中的代码把列表中的数字相乘,然后再将所得结果乘以5。顺序执行这段程序没有问题,但并行执行时有一个缺陷,使用流并行化执行该段代码,并修复缺陷。

例6-11 把列表中的数字相乘,然后再将所得结果乘以5,该实现有一个缺陷

  1. public static int multiplyThrough(List<Integer> linkedListOfNumbers) {
  2. return linkedListOfNumbers.stream()
  3. .reduce(5, (acc, x) -> x * acc);
  4. }
  1. 例6-12中的代码计算列表中数字的平方和。尝试改进代码性能,但不得牺牲代码质量。只需要一些简单的改动即可。

例6-12 求列表元素的平方和,该实现方式性能不高

  1. public int slowSumOfSquares() {
  2. return linkedListOfNumbers.parallelStream()
  3. .map(x -> x * x)
  4. .reduce(0, (acc, x) -> acc + x);
  5. }

6.9 练习 - 图1确保将基准代码运行多次,GitHub上提供的示例代码有一份基准数据可供使用。