私はJava 8で並行性とラムダを学ぼうとしています。しかし、私のコードはマップ内のラムダブロックに入っていません。マップ内のラムダが実行されていないのはなぜですか?
List<Book> bookList = new ArrayList<Book>();
isbnList
.stream()
.map(isbn -> (CompletableFuture.supplyAsync(() -> {
try {
List<String> pageContents = getUrlContents(webLink + isbn);
return new Book(
parseBookTitle(pageContents),
isbn,
parseRank(pageContents)
);
} catch (IOException ex) {
return null;
}
})).thenApply(a -> bookList.add(a))
);
デバッグ中に、コードは.map行で終了し、空のbookListを取得しています。シーケンシャルコードで正しい結果が得られます。
マップをforEachに置き換えましたが、制御はラムダブロック内にはありません。提案してください。 – Manvi
非同期タスクを共通のフォークジョインプールに送信していますが、結果を待っているわけではありません。タスクが完了したことを確認する必要があります。マップを使用することに戻りますが、forEachで非同期先物取引に参加してください。私は私の答えを更新します。私はそれに応じて私の答えを更新します。 –
ありがとうナンドール。出来た。 – Manvi