【问题标题】:Using Stream to iterate over Fibonacci Sequence in Java在 Java 中使用 Stream 迭代斐波那契数列
【发布时间】:2019-03-08 11:15:25
【问题描述】:

在课堂上,我们使用此代码通过整数流生成斐波那契数列。 有人可以向我解释一下 .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?
    }
}

【问题讨论】:

  • 你试过阅读java文档吗?

标签: java loops dictionary java-stream


【解决方案1】:

由于种子 new Integer[] {0,1},您将在 Integer[] 上使用两个元素进行迭代。每一步都使用新的Integer[] 进行迭代,并重新评估其值。

map 只是访问第一个Integer 以最终消耗(利用)它。

例如,更好的组合实现可能看起来像(print 20 first fibonacci element):

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 -&gt; s[0]) 获取每个数组, 从他们那里返回第一个数字,例如0 1 1 2 3

【讨论】:

  • 顺便说一下,请注意您的流是无限的,您应该使用短路操作来结束它。
  • 谢谢!您的回答帮助我更好地理解了这一点!
  • 它只是过滤掉 Array 的第一个元素,因为 getFibStream() 的返回类型要求单个 Integer 而不是 Integer[]。
  • 补充说明;斐波那契流由 {0,1} {1,1} {1,2} {2,3} {3,5} 之类的数组组成,.map(s -&gt; s[0]) 获取每个数组,返回第一个数字,例如 0 1 1 2 3
  • @JollyJoker 谢谢。我可以照原样举这个例子吗?
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2016-02-19
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多