我有这段代码,它对响应对象列表进行反应性迭代,并尝试根据内部 id 填充外部 ID,如果两个对象共享相同的内部 id,那么应该使用相同的外部 id
该方法getExternalId
必须保留其签名者。
Map<String, String> internalToExternalMap = new HashMap<>();
Flux.fromIterable(dataList)
.flatMapSequential(data -> {
if (internalToExternalMap.containsKey(data.getInternalId())) {
data.setExternalId(internalToExternalMap.get(data.getInternalId()));
} else {
getExternalId(data.getInternalId())
.subscribe(externalId -> {
data.setExternalId(externalId);
internalToExternalMap.put(data.getInternalId(), externalId);
});
}
return data;
})
private static Mono<String> getExternalId () {
Thread.sleep(5000); //simulating long time retrieval
return Mono.just(UUID.randomUUID().toString()); //
}
问题是,如果使用具有相同内部 id 的 2 个对象的列表运行此代码,我希望该方法getExternalId
被调用一次,并且这两个对象现在也具有相同的外部 id。然而,情况并非如此getExternalId
,两个对象的方法和外部 id 不同
编辑:方法的真正实现getExternalId
是一个外部服务,所以外部 id 检索需要很长时间。