5.6 练习
1.方法引用
回顾第3章中的例子,使用方法引用改写以下方法:
a. 转换大写的map方法;
b. 使用reduce实现count方法;
c. 使用flatMap连接列表。
2.收集器
a. 找出名字最长的艺术家,分别使用收集器和第3章介绍过的reduce高阶函数实现。然后对比二者的异同:哪一种方式写起来更简单,哪一种方式读起来更简单?以下面的参数为例,该方法的正确返回值为"Stuart Sutcliffe":
`Stream<String> names = Stream.of("John Lennon", "Paul McCartney","George Harrison", "Ringo Starr", "Pete Best", "Stuart Sutcliffe");
b. 假设一个元素为单词的流,计算每个单词出现的次数。假设输入如下,则返回值为一个形如[John → 3, Paul → 2, George → 1]的Map:
Stream<String> names = Stream.of("John", "Paul", "George", "John","Paul", "John");
c. 用一个定制的收集器实现Collectors.groupingBy方法,不需要提供一个下游收集器,只需实现一个最简单的即可。别看JDK的源码,这是作弊!提示:可从下面这行代码开始:
public class GroupingBy
这是一个进阶练习,不妨最后再尝试这道习题。
3.改进Map
使用Map的computeIfAbsent方法高效计算斐波那契数列。这里的“高效”是指避免将那些较小的序列重复计算多次。
