gpt4 book ai didi

java - 创建函数流的更好方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:12 25 4
gpt4 key购买 nike

我希望对定义如下的函数列表进行惰性求值;

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 is not a functional interface

编译错误。不接受 T 的功能接口(interface)类型.of(T... values) 中的通用类型


是否有更快速的方法来创建这些函数的流?我讨厌明确定义 of使用 Function 的方法及其输入输出类型。它不会以更通用的方式工作吗?

这个问题源于下面问题的主题;
Lambda Expression and generic method

最佳答案

你可以把它分成两行:

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();

或使用转换:

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();

但我认为您无法避免指定 Stream 的类型元素 - Function<Input, Optional<Output>> - 某处,否则编译器无法从方法引用中推断出它。

关于java - 创建函数流的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47853407/

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