Я разделил список на 5 частей, и я хочу выполнить параллельно с помощью restTemplate, у меня есть следующий метод:
@Async
private CompletableFuture<List<Cidade>> MontarCidadesPorEstado(List<Cidade> listaCidades, List<UF> estado) {
estado.forEach(es -> {
Map<String, String> param = new HashMap<String, String>();
param.put("UF", es.getSigla());
Cidade[] cidades = restTemplate.getForObject(url, Cidade[].class, param);
listaCidades.addAll(Arrays.asList(cidades));
});
return CompletableFuture.completedFuture(listaCidades);
}
Итак, я создал список CompletableFuture
для выполнения всех из них параллельно, но при добавлении каждого CompletableFuture
в список он уже выполняет его, не делая его параллельным, например:
List<List<UF>> subSets = Lists.partition(estados, 5);
List<CompletableFuture<List<Cidade>>> lstCompletableFuture = new ArrayList();
subSets.forEach(estado -> {
lstCompletableFuture.add(MontarCidadesPorEstado(listaCidades, estado));
});
CompletableFuture.allOf(lstCompletableFuture.toArray(new CompletableFuture[lstCompletableFuture.size()]));
Что я делаю неправильно, я думал, что он должен выполнить метод MontarCidadesPorEstado когда я звоню CompletableFuture.allOf
.