我有这样的场景:如果条目在 DB 中可用,我必须检查表,然后如果可用,我需要使用 webclient 调用相同的外部 api n 次,收集所有响应并将它们保存在 DB 中。如果条目在 DB 中不可用,则调用旧流程。
这是我的实现。需要改进它的建议。没有 for-each
public Mono<List<ResponseObject>> getdata(String id, Req obj) {
return isEntryInDB(id) //checking the entry in DB
.flatMap(
x -> {
final List<Mono<ResponseObject>> responseList = new ArrayList<>();
IntStream.range(0, obj.getQuantity()) // quantity decides how many times api call t happen
.forEach(
i -> {
Mono<ResponseObject> responseMono =
webClientCall(
id,
req.getType())
.map(
res ->
MapperForMappingDataToDesriedFormat(res));
responseList.add(responseMono);
});
return saveToDb(responseList);
})
.switchIfEmpty(oldFlow(id, req)); //if DB entry is not there take this existing flow.
需要一些建议来改进它而不使用 foreach。