У меня проблема с stream().forEach
он не заканчивается sh вовремя до возврата метода, вот как:
Моя сущность:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Foo {
private String a;
private int b;
private int c;
private String d;
private String e;
}
I есть метод, который вызывает внешнюю службу, которая получает список Foo
, а затем для каждого члена этого списка вызывает две другие внешние службы для заполнения полей d
и e
:
public List<Foo> getOrdresListe() {
Foo[] fooArray = externalServiceOne.getFooList();
Arrays.stream(fooArray).forEach((f) -> {
CompletableFuture.supplyAsync(AsyncUtils.supplierWithCustomDependencies(() -> {
Dob dob = externalServiceTwo.getDeeEntity(f.getA());
f.setD(dob.getD());
Efo efo = externalServiceThree.getEeeEntity(f.getA());
f.setE(efo.getE());
return f;
}));
});
List<Foo> fooList = Arrays.asList(fooArray);
return fooList; // when this statement is reached d and e fields are null.
}
Из-за некоторых проблем с производительностью (и некоторых передовых методов) я вызываю externalServiceTwo.getDeeEntity
и externalServiceThree.getEeeEntity
асинхронно с настраиваемым поставщиком, чтобы установить некоторые зависимости при вызове служб. Но основная проблема заключается в том, что при возврате полей fooList
d
и e
нулевые.
Мой вопрос в том, как дождаться всех выполнений asyn c fo fini sh перед возвратом fooList
?