bur*_*ete 6 java java-8 java-stream functional-interface
我希望对我定义的函数列表进行惰性评估,如下所示;
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();
Run Code Online (Sandbox Code Playgroud)
如您所见,每个类(a,b和c)都Optional<Output> eval(Input in)
定义了一个方法.如果我尝试做
Stream.of(...)....
Run Code Online (Sandbox Code Playgroud)
它忽略了显式类型
T不是功能界面
编译错误.不接受T
泛型类型的功能接口类型.of(T... values)
有没有更快捷的方法来创建这些功能的流?我讨厌明确定义of
方法Function
及其输入输出类型.它不会以更通用的方式工作吗?
这个问题源于以下问题的主题;
Lambda表达式和通用方法
你可以把它分成两行:
Stream<Function<Input, Optional<Output>>> stream = Stream
.of(classA::eval, classB::eval, classC::eval);
Optional<Output> out = stream.map(f -> f.apply(input))
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
Run Code Online (Sandbox Code Playgroud)
或使用铸造:
Optional<Output> out = Stream.of(
(<Function<Input, Optional<Output>>>)classA::eval,
classB::eval,
classC::eval)
.map(f -> f.apply(input))
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
Run Code Online (Sandbox Code Playgroud)
但我认为您无法避免在某处指定Stream
元素的类型Function<Input, Optional<Output>>
,否则编译器无法从方法引用中推断出它。
归档时间: |
|
查看次数: |
650 次 |
最近记录: |