【发布时间】:2020-04-12 00:34:55
【问题描述】:
在java学习Flux(reactive-core)时,遇到以下关于Function的问题。
这是Flux.zip()方法签名:
public static <I, O> Flux<O> zip(
final Function<? super Object[], ? extends O> combinator,
Publisher<?extends I>... sources) {
return zip(combinator, Queues.XS_BUFFER_SIZE, sources);
}
当我尝试调用此方法时:
Flux<User> userFluxFromStringFlux(Flux<String> usernameFlux, Flux<String> firstnameFlux, Flux<String> lastnameFlux) {
// predefined function taking object[] and returns User
Function<Object[], User> function = array -> new User(array[0].toString(),array[1].toString(), array[2].toString());
// it is working without error
Flux.zip(function, usernameFlux, firstnameFlux, lastnameFlux);
// this is also working without error
Flux.zip(array -> {
return new User(array[0].toString(),array[1].toString(), array[2].toString());
}, usernameFlux, firstnameFlux, lastnameFlux);
// but this has error with array[0] "Array type expected; found: 'org.reactivestreams.subscriber<capture<? super java.lang.object>>'"
Flux.zip(array -> new User(array[0].toString(),array[1].toString(), array[2].toString()), usernameFlux, firstnameFlux, lastnameFlux);
return null;
}
第三种方式使用匿名函数,但IDEA报错:
预期的数组类型;找到:'org.reactivestreams.subscriber>。
我想知道为什么预定义的函数和具有显式返回的匿名函数可以工作,但匿名函数?
感谢您的帮助。
【问题讨论】:
标签: java reactive-programming project-reactor flux