【发布时间】:2019-04-15 16:13:59
【问题描述】:
我是学生,正在学习函数式 Java 8。我有项目要做,但我不明白这个函数接口是如何工作的。我的老师告诉我“你应该知道这一点”,我正在寻求帮助来理解这个问题。它应该计算斐波那契数列
我得到了这个代码
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)));
}
}
有人可以帮我解决这个问题吗?
【问题讨论】:
-
但它不起作用..您在看这三种实现中的哪一种?当然,你应该知道他们都不是在做同样的事情。
-
我认为 StreamUtils.generateRest() 的第一次和第二次运行做同样的事情
-
第三个
generateRest调用应该打印什么?Stream只有一个元素,BinaryOperator忽略第一个参数。 -
这里是使用 Java 8 流的斐波那契解决方案:stackoverflow.com/questions/30595844/…
-
你能给出其中任何一个的预期输出吗?
generateRest的返回类型应该是Stream<T>吗?原始类型只会使事情复杂化。
标签: java lambda java-8 java-stream functional-interface