Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定项目反应器中反应链中字节数组的来源_Java_Spring_Reactive Programming_Project Reactor_Reactor - Fatal编程技术网

Java 确定项目反应器中反应链中字节数组的来源

Java 确定项目反应器中反应链中字节数组的来源,java,spring,reactive-programming,project-reactor,reactor,Java,Spring,Reactive Programming,Project Reactor,Reactor,我正在从3个灰度图像构建一个彩色图像。我使用rsocket为每个色带发出3个单独(并行)请求,它返回一个Mono。我需要收集所有3字节数组作为一个列表,以便我可以正确地构建映像。然而,对于如何在下一个反应操作中识别字节数组属于哪个频带,我感到困惑 以下是一些示例代码: return Flux.just(redRequest, blueRequest, greenRequest) .parallel() .flatMap(clien

我正在从3个灰度图像构建一个彩色图像。我使用rsocket为每个色带发出3个单独(并行)请求,它返回一个
Mono
。我需要收集所有3字节数组作为一个列表,以便我可以正确地构建映像。然而,对于如何在下一个反应操作中识别字节数组属于哪个频带,我感到困惑

以下是一些示例代码:

 return Flux.just(redRequest, blueRequest, greenRequest)
                .parallel()
                .flatMap(client::getBytes) // calls the remote service to get the bytes for the given color band
                .sequential()
                .collectList()
                .map(response -> {
                   byte[] redBytes = response.get(0); //???
                }
我创建了一个包装类来保存原始请求、字节数组和带标识符,这样我就可以在每个操作中传递所有对象,但是因为来自我的rsocket客户端的响应是Mono,所以我只能通过在map或flatMap中调用字节数组来具体化(可能是错误的术语),在这一点上,我无法访问我的包装类,也不确定字节数组属于哪个频带

我可以通过不在并行请求中调用客户端来解决这个问题吗?我是否可以保证项目将按照我在
Flux.just()
中定义的顺序在链中传播


基本上在上一个映射中,我只想知道哪个字节数组属于哪个色带。

用颜色字段将每个请求包装在对象中,并更改发送这些请求的管道的
flatMap
部分:

Flux.just(
  new Request(redRequest, RED),
  new Request(blueRequest, BLUE),
  new Request(greenRequest, GREEN)
)
.parallel()
.flatMap(request -> 
  client.getBytes(request)
    .map(response -> new Response(response.get(0), request.color))
)
.sequential()
.collectList()
.map(response -> {
  byte[] redBytes = response.bytes;
  Color color = response.color;
  // 
})

在对象中用颜色字段包装每个请求,并更改发送这些请求的管道的
flatMap
部分:

Flux.just(
  new Request(redRequest, RED),
  new Request(blueRequest, BLUE),
  new Request(greenRequest, GREEN)
)
.parallel()
.flatMap(request -> 
  client.getBytes(request)
    .map(response -> new Response(response.get(0), request.color))
)
.sequential()
.collectList()
.map(response -> {
  byte[] redBytes = response.bytes;
  Color color = response.color;
  // 
})

非常简单和优雅的解决方案。事实上,作为解决方案的一部分,我已经创建了一个包装器类,但我所需要的正是对来自客户机方法的响应调用map操作来访问字节并在包装器上设置它们。非常感谢。非常简单和优雅的解决方案。事实上,作为解决方案的一部分,我已经创建了一个包装器类,但我所需要的正是对来自客户机方法的响应调用map操作来访问字节并在包装器上设置它们。非常感谢。