使用流迭代Java中的斐波那契序列

时间:2019-03-08 11:15:25

标签: 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 -> s[0]);  //what is .map() doing here?
    }
}

1 个答案:

答案 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

comments by JollyJoker

  

其他说明;斐波那契流是由像   {0,1} {1,1} {1,2} {2,3} {3,5}.map(s -> s[0])获取每个数组,   返回他们的第一个数字,例如0 1 1 2 3