当前位置: 首页 > 知识库问答 >
问题:

Java8中的“基于地图的备忘录”?

诸修伟
2023-03-14

在我前面的问题中

    LongStream fibs = Stream
            .iterate(
            new long[]{1, 1},
            f -> new long[]{f[1], f[0] + f[1]}
            )
            .mapToLong(f -> f[0]);

    fibs
            .limit(30)
            .forEach(System.out::println);

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 258 4 418 1 676 5 109 46 177 11 286 57 463 68 750 25 121 393 196 418 317 811 514 229 832 040

尽管Java8中函数的代码风格表示仍然让我感到困惑,但我可以肯定它与fibonacci序列的数学定义是一致的。

他说,计算速度表明它可以记忆功能

你能解释一下。任何参考/文件也很感谢。多谢了。

共有1个答案

解宏扬
2023-03-14

正如Misha所说,记住的是供应商 函数接口,因为它存储了两个私有变量n1n2。然后,该对象具有可变的状态,并具有副作用。在使用平行化时可能会产生问题。

new Supplier<Long>() {
    private long n1 = 1;
    private long n2 = 2;

    @Override
    public Long get() {
        long fibonacci = n1;
        long n3 = n2 + n1;
        n1 = n2;
        n2 = n3;
        return fibonacci;
    }
}

相反,使用iterate的解决方案是不可变的,并且可以并行化。它生成大小为2的long数组流,从[1,1]开始,并迭代应用函数f->new long[]{f[1],f[0]+f[1]}

.iterate(
        new long[]{1, 1},
        f -> new long[]{f[1], f[0] + f[1]}
        )
 类似资料:
  • 问题内容: 该脚本绘制控件,英雄,表面和地图: 有一个英雄,当玩家使用控件移动他时必须重新绘制,所有其他可绘制对象也必须重新绘制。问题在于绘制地图是一个漫长的过程,因此我创建的地图越大,英雄移动的速度就越慢,因为必须绘制地图的每个图块。有没有一种方法可以将所有图块以其他方法放置到一个位图,然后在canvas方法中绘制该位图? 问题答案: 最好的选择是只绘制地图在屏幕上可见的部分。这样,无论整个地图

  • 问题内容: 我看到python 3.2在functools库中具有作为装饰器的备注。 http://docs.python.org/py3k/library/functools.html#functools.lru_cache 不幸的是,它还没有反向移植到2.7。有什么特定的原因,为什么它在2.7中不可用?是否有任何第三方库提供相同的功能,或者我应该编写自己的库? 问题答案: 有什么特定的原因,为

  • 备注 大多数算法同时处理类型和值(参见类型计算) 算法通常返回一个新容器作为它们的返回结果;不会更改原容器(参见算法) 所有的算法都是constexpr函数对象 容器 说明 tuple 固定长度的基于索引的泛型异构序列,可将它视为异构对象中的std::vector optional 表示可选值,即可以为空的值。它有点像std::optional,除了空值也是编译时已知的外 map 无序关联数组映射

  • 本文向大家介绍Python中的字典遍历备忘,包括了Python中的字典遍历备忘的使用技巧和注意事项,需要的朋友参考一下 备忘一下python中的字典如何遍历,没有什么太多技术含量.仅供作为初学者的我参考. interitems和iterms区别 参考 http://stackoverflow.com/questions/10458437/python-what-is-the-difference-

  • Spring data提供了各种用于CRUD、分页和mongob排序的存储库。当我们需要来自mongob的使用各种属性的文档时,我们倾向于编写方法或编写带有显式查询的方法,并用注释。但是如果我的文档有许多属性并且我需要各种获取文档的方法,Spring是否提供了一种“存储库方法”来接收属性和值的Map?编写各种可能很麻烦。使用QueryDSL似乎是一种选择,但需要代码生成和build.gradle更