0

我有这段代码,它对响应对象列表进行反应性迭代,并尝试根据内部 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 检索需要很长时间。

4

0 回答 0