我有點困惑,現在我,所以我也應該返回CompletableFuture<List<A>>
CompletableFutures和過濾依據是內部
方法裏面的方法值是:
CompletableFuture<List<String>> toReturn = asyncCall().thenApply(....)
.thenCompose(listOfStuff -> convertToList(listOfStuff.stream().map(
key -> asyncCall2(key)
.thenApply(optionalValue -> optionalValue.orElse(null))
).collect(Collectors.toList()));
和convertToList()
只需加入期貨CompletableFuture<List<ComputableFuture<A>>>
轉換成CompletableFuture<List<A>>
基本上我的意圖是,以過濾從optionalValue.orElse(null)
出現空值,而且它會很容易科爾之前做過濾器所有這一切都列在最後一行,但如果我在.collect
之前使用它,它正在完成CompletableFutures
我懷疑在我的代碼中可以做很多重構。
編輯:
private<T> CompletableFuture<List<T>> convertToList(List<CompletableFuture<T>> toConvert) {
return CompletableFuture.allOf(toConvert.toArray(new CompletableFuture[toConvert.size()]))
.thenApply(v -> toConvert.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList())
);
}
使用'Stream.of()'和'Stream.empty()'? – akalikin
不要調用'.orElse(null)',那麼你不需要測試'null'。所以'convertToList'的參數類型應該是'List >>',它可以在'join'之後執行'.filter(Optional :: isPresent).map(Optional :: get)'... –
Holger
@ Holger是的,這是一個在'convertToList'中進行過濾的選項(可選項或空值),我想盡一切努力,而'convertToList'可以是一個通用實用函數 – Amir