Ich versuche, Nebenläufigkeit und Lambdas in Java 8 zu lernen. Aber mein Code ist nicht in Lambda-Block in Karte eingeben.Warum Lambda innerhalb der Karte nicht läuft?
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))
);
Während des Debuggens wird der Code bei .map line beendet und ich bekomme eine leere Buchliste. Sequenzieller Code für dasselbe gibt mir das richtige Ergebnis.
Ersetzt Karte mit ForEach aber noch Kontrolle geht nicht in Lambda-Block. Bitte vorschlagen. – Manvi
Sie senden asynchrone Aufgaben an den gemeinsamen Fork-Join-Pool, aber Sie warten nicht auf die Ergebnisse. Sie müssen sicherstellen, dass Ihre Aufgaben abgeschlossen sind. Gehen Sie zurück zur Karte, aber verbinden Sie sich für Ihre asynchronen Futures in einem forEach. Ich werde meine Antwort aktualisieren. Ich werde meine Antwort entsprechend aktualisieren. –
Danke Nándor. Es funktionierte. – Manvi