Java 在Flux/Mono中应该使用什么来连接耦合项
在JS中,您可以使用Java 在Flux/Mono中应该使用什么来连接耦合项,java,reactive-programming,project-reactor,Java,Reactive Programming,Project Reactor,在JS中,您可以使用 但对于Flux/Mono,我找不到这样的解决方案。当您处理不同的项目之后必须将它们组合在一起使用时,最佳做法是什么?这取决于您希望如何组合它们。 按顺序?使用Flux.concat 所有这些都是平行的?使用Flux.zip 如果您只希望得到一个结果,Mono.zipWith可能适合您。这取决于您希望如何组合它们。 按顺序?使用Flux.concat 所有这些都是平行的?使用Flux.zip 如果您只希望得到一个结果,Mono.zipWith可能适合您。有很多“合并运算符”
但对于Flux/Mono,我找不到这样的解决方案。当您处理不同的项目之后必须将它们组合在一起使用时,最佳做法是什么?这取决于您希望如何组合它们。 按顺序?使用
Flux.concat
所有这些都是平行的?使用Flux.zip
如果您只希望得到一个结果,
Mono.zipWith
可能适合您。这取决于您希望如何组合它们。
按顺序?使用Flux.concat
所有这些都是平行的?使用Flux.zip
如果您只希望得到一个结果,
Mono.zipWith
可能适合您。有很多“合并运算符”
zip、concat、merge和combinelateest是主要的三种
Zip允许您组合流,其中项目将在流中以1对1的关系分组。这就是您丢失最后一个元素的原因
当您不确定每个流的数量和提供事件的频率时,可以使用concat(将另一个流添加到第一个流的末尾)、merge(其中项目按照两个流的出现顺序放置在最终流上)或合并最新的(将每个流的最后两个事件变为其他事件).
你的案子听起来像是合并案 有很多“合并运算符” zip、concat、merge和combinelateest是主要的三种 Zip允许您组合流,其中项目将在流中以1对1的关系分组。这就是您丢失最后一个元素的原因 当您不确定每个流的数量和提供事件的频率时,可以使用concat(将另一个流添加到第一个流的末尾)、merge(其中项目按照两个流的出现顺序放置在最终流上)或合并最新的(将每个流的最后两个事件变为其他事件).
你的案子听起来像是合并案 经过一些更改后,我的代码如下所示
public Mono<Item> createItem(final @NonNull String userName, String description, String[] tags,
@NonNull Flux<ImageDTO> photos) {
val item = initItem(userName);
item.setDescription(description);
if (null != tags) {
item.getTags().addAll(Arrays.asList(tags));
}
return photos.flatMap(photo -> imageService.storeImage(photo.getStream(), photo.getExt()))
.reduce(item, (item1, photoIri) -> {
item1.getPhotos().add(photoIri);
return item1;
})
.flatMap(itemRepository::save)
.flatMap(createdItem -> {
val itemHistory = getHistoryForCreatedItem(userName, createdItem);
return itemHistoryRepository.save(itemHistory).then(Mono.just(createdItem));
});
}
public Mono createItem(最终@NonNull字符串用户名、字符串描述、字符串[]标记、,
@非零通量照片){
val item=initItem(用户名);
项目说明(说明);
if(null!=标记){
item.getTags().addAll(Arrays.asList(tags));
}
返回photos.flatMap(photo->imageService.storeImage(photo.getStream(),photo.getExt())
.减少(项目,(项目1,photoIri)->{
item1.getPhotos().add(photoIri);
返回项目1;
})
.flatMap(itemRepository::save)
.flatMap(createdItem->{
val itemHistory=getHistoryForCreatedItem(用户名,createdItem);
返回itemHistoryRepository.save(itemHistory)。然后返回(Mono.just(createdItem));
});
}
目前我不喜欢:
- .减少(项目,(项目1,photoIri)->
- .then(Mono.just(createdItem))
public Mono<Item> createItem(final @NonNull String userName, String description, String[] tags,
@NonNull Flux<ImageDTO> photos) {
val item = initItem(userName);
item.setDescription(description);
if (null != tags) {
item.getTags().addAll(Arrays.asList(tags));
}
return photos.flatMap(photo -> imageService.storeImage(photo.getStream(), photo.getExt()))
.reduce(item, (item1, photoIri) -> {
item1.getPhotos().add(photoIri);
return item1;
})
.flatMap(itemRepository::save)
.flatMap(createdItem -> {
val itemHistory = getHistoryForCreatedItem(userName, createdItem);
return itemHistoryRepository.save(itemHistory).then(Mono.just(createdItem));
});
}
public Mono createItem(最终@NonNull字符串用户名、字符串描述、字符串[]标记、,
@非零通量照片){
val item=initItem(用户名);
项目说明(说明);
if(null!=标记){
item.getTags().addAll(Arrays.asList(tags));
}
返回photos.flatMap(photo->imageService.storeImage(photo.getStream(),photo.getExt())
.减少(项目,(项目1,photoIri)->{
item1.getPhotos().add(photoIri);
返回项目1;
})
.flatMap(itemRepository::save)
.flatMap(createdItem->{
val itemHistory=getHistoryForCreatedItem(用户名,createdItem);
返回itemHistoryRepository.save(itemHistory)。然后返回(Mono.just(createdItem));
});
}
目前我不喜欢:
- .减少(项目,(项目1,photoIri)->
- .then(Mono.just(createdItem))