Ich versuche, eine Liste mit anderen Streams zuzuordnen.Java8 streams map - prüfen, ob alle Kartenoperationen erfolgreich waren?
Einige Elemente der ursprünglichen Liste können nicht zugeordnet werden. Das heißt, die Zuordnungsfunktion ist möglicherweise nicht in der Lage, einen geeigneten neuen Wert zu finden.
Ich möchte wissen, wenn eine der Zuordnungen fehlgeschlagen ist. Idealerweise würde ich auch gerne die Verarbeitung stoppen, sobald ein Fehler passiert ist.
Was ich momentan tue, ist:
- Die Funktionszuordnung gibt
null
, wenn kein zugeordneter Wert ist - I
filter()
zu entfernen nulls aus dem Strom - I
collect()
und dann - I Vergleichen Sie die Größe des Ergebnisses mit der Größe der ursprünglichen Liste.
Zum Beispiel:
List<String> func(List<String> old, Map<String, String> oldToNew)
{
List<String> holger = old.stream()
.map(oldToNew::get)
.filter(Objects::nonNull)
.collect(Collectors.toList);
if (holger.size() < old.size()) {
// ... appropriate error handling code ...
}
else {
return holger;
}
}
Dies ist nicht sehr elegant. Auch wird alles verarbeitet, auch wenn das Ganze scheitern sollte.
Vorschläge für eine bessere Vorgehensweise? Oder vielleicht sollte ich Streams zusammen abschrecken und gute alte Loops verwenden?
Warum werfen Sie keine unchecked Ausnahme von 'oldToNew :: get', wenn das Ergebnis null ist, und fangen Sie es außerhalb? – Tunaki
@Tunaki Danke, es ist eine Option. Ich weiß nicht, ob das entweder Eleganz oder Leistung verbessern würde (da Ausnahmen angeblich teuer sind). – daphshez
Benenne deine Variable nicht "neu". Das wird nicht funktionieren ... Und was ist ein Rückgabetyp von 'void Liste' soll bedeuten? –
Holger