Java中使用流迭代斐波那契序列
在类中,我们使用此代码通过整数流生成斐波那契序列。 有人能给我解释一下.map()函数在这段代码中的作用吗Java中使用流迭代斐波那契序列,java,loops,dictionary,java-stream,Java,Loops,Dictionary,Java Stream,在类中,我们使用此代码通过整数流生成斐波那契序列。 有人能给我解释一下.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
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?
}
}
公共类fibStream{
公共静态流getFibStream(){
return Stream.iterate(新整数[]{0,1},s->new Integer[]{s[1],s[0]+s[1]})
.map(s->s[0]);//.map()在这里做什么?
}
}
由于种子新整数[]{0,1}
,您将使用两个元素在整数[]
上迭代。使用新的整数[]
迭代每个步骤,并重新计算其值
map
只是访问那些Integer
中的第一个,以最终使用它
例如,更好地组合相同的实现可能如下所示(print 20 first fibonacci element):
从
补充澄清;斐波那契流由如下数组组成
{0,1}{1,1}{1,2}{2,3,5}
和.map(s->s[0])
获取每个数组,
从它们返回第一个数字,如01123
你试过阅读java文档吗?顺便说一下,请注意你的流是无限的,你应该使用一个短路操作来结束它。Thx!你的回答帮助我更好地理解了这一点!它只是过滤掉数组的第一个元素,因为getFibStream()的返回类型要求的是单个整数,而不是整数[];Fibonacci流由{0,1}{1,1}{1,2}{2,3}{3,5}等数组组成,
.map(s->s[0])
获取每个数组,返回第一个数字,如0 1 23@JollyJoker谢谢我能把这个例子当作答案吗?
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