在课堂上,我们使用此代码通过整数流生成斐波那契数列。 有人可以向我解释一下此代码中.map()函数的作用吗?
public class fibStream {
public static Stream<Integer> getFibStream() {
return Stream.iterate(new Integer[] {0,1}, s -> new Integer[]{s[1], s[0] + s[1]})
.map(s -> s[0]); //what is .map() doing here?
}
}
答案 0 :(得分:2)
由于种子new Integer[] {0,1}
,您将使用两个元素在Integer[]
上进行迭代。每一步都以新的Integer[]
进行迭代,并重新评估其值。
map
只是访问这些Integer
中的第一个,以最终消耗(利用)它。
例如,更好地实现相同的实现看起来像(打印20个第一个斐波那契元素):
Stream.iterate(new Integer[] {0,1}, s -> new Integer[]{s[1], s[0] + s[1]})
.limit(20) // short-circuit
.map(s -> s[0])
.forEach(System.out::println); // consume the mapped element
其他说明;斐波那契流是由像
{0,1} {1,1} {1,2} {2,3} {3,5}
和.map(s -> s[0])
获取每个数组, 返回他们的第一个数字,例如0 1 1 2 3
。