【发布时间】:2017-12-17 08:29:31
【问题描述】:
我希望对我定义如下的函数列表进行惰性求值;
Optional<Output> output = Stream.<Function<Input, Optional<Output>>> of(
classA::eval, classB::eval, classC::eval)
.map(f -> f.apply(input))
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
如您所见,每个类(a、b 和 c)都定义了一个 Optional<Output> eval(Input in) 方法。如果我尝试做
Stream.of(...)....
忽略显式类型,它给出
T 不是函数式接口
编译错误。不接受 .of(T... values) 中 T 泛型类型的功能接口类型@
有没有更快捷的方法来创建这些函数的流?我讨厌用Function 及其输入输出类型明确定义of 方法。它不会以更通用的方式工作吗?
这个问题源于下一个问题的主题;
Lambda Expression and generic method
【问题讨论】:
-
可以分享签名
ClassA#eval吗? -
问题中已经存在
Optional<Output> eval(Input in),所有ClassA、ClassB和ClassC都相同 -
阅读时跳过了那一行,过失。
-
@Mureinik :) 人为错误
-
注意:您现在可以使用
.flatMap(Optional::stream)代替isPresentget成语。
标签: java java-8 java-stream functional-interface