gpt4 book ai didi

java - 在 Java 中使用 Stream 和 BinaryOperator 的 Fibonacci

转载 作者:行者123 更新时间:2023-11-29 04:09:56 24 4
gpt4 key购买 nike

我是学生,正在学习函数式 Java 8。我有项目要做,但我不明白这个函数接口(interface)是如何工作的。我的老师告诉我“你应该知道”,我正在寻求帮助来理解这个问题。应该算斐波那契数列

我得到了这个代码

StreamUtils.generateRest(Stream.of(1, 1), (a, b) -> a + b)
.limit(7)
.forEach(System.out::println);

StreamUtils.generateRest(Stream.of("AAA", "BB", "KKKK"), (a, b) -> a + b)
.limit(7)
.forEach(System.out::println);

StreamUtils.generateRest(Stream.of(i -> 0),
(BinaryOperator<UnaryOperator<Integer>>) (f, g) -> (x -> x == 0 ? 1 : x * g.apply(x - 1)))
.limit(10)
.map(f -> f.apply(7))
.forEach(System.out::println);

我做了类似的事情,但它不起作用

public class StreamUtils<T> {

public static <T> Stream generateRest(Stream<T> stream, BinaryOperator<T> binaryOperator) {
return Stream.of(stream.reduce((a, b) -> binaryOperator.apply(a, b)));
}

}

有人可以帮助我并解释如何解决这个问题吗?

最佳答案

要使第一个示例工作,您需要实现如下内容:

private static class StreamUtils<T> {
public static <T> Stream generateRest(Stream<T> stream, BinaryOperator<T> binaryOperator) {
return Stream.iterate(stream.toArray(), p -> new Object[]{p[1], binaryOperator.apply((T) p[0], (T) p[1])})
.flatMap(p -> Stream.of(p[0]));
}
}

它从您的输入流创建数组,然后将传递的函数应用于两个元素,将上一次迭代的结果移动到位置 0,因为我们需要前两个值来计算下一个。然后它会创建无限的计算斐波纳契元素流。

输出是:

1
1
2
3
5
8
13

以及具有正确泛型用法的版本,因为您的初始结构会生成原始类型。

private static class StreamUtils {
public static <T> Stream<T> generateRest(Stream<T> stream, BinaryOperator<T> binaryOperator) {
return Stream.iterate(stream.toArray(), p -> new Object[]{p[1], binaryOperator.apply((T) p[0], (T) p[1])})
.flatMap(p -> Stream.of((T) p[0]));
}
}

关于java - 在 Java 中使用 Stream 和 BinaryOperator 的 Fibonacci,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55693325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com