Wenn ich verstehe zu können, sollte die erste nicht-null Produktnamen und die Produktfarbe und dass die ersten nicht-null Produktnamen in der Liste als die ersten nicht in einem anderen Ort sein könnten gut abrufen mögest Nullfarbe.
Das Problem hier ist die Art und Weise, wie die Stream-Pipeline ausgeführt wird, dh wir geben nicht jedes Element des Streams durch die erste Zwischenoperation und geben dann alle von dieser Zwischenoperation zurückgegebenen Elemente durch die nächste Zwischenoperation und so weiter bis zum Terminalbetrieb. Stattdessen wird jedes Element des Streams vertikal in der Stream-Pipeline übergeben und das erste Element, das alle Zwischenoperationen erfolgreich übergibt, wird mit dem Aufruf an findFirst().get()
abgerufen.
So scheint es mir, dass es sehrunwahrscheinlich die Aufgabe in der Hand mit Strom zu erreichen und auch wenn es möglich, es wird die Stromleitungen ausgeführt wird aufgrund der Art und Weise zu kompliziert werden.
Beachten Sie auch, dass get()
gerade von einem Optional Aufruf ein Missbrauch ist, und Sie sollten diese Methode nie verwenden, wenn Sie 100% sicher, es sind wird ein Wert vorhanden sein; Gründe, die später erläutert werden.
jedoch unter Verwendung eines for-Schleife oder eine foreach Schleife können wir die Daten in einem einzigen Durchlauf durch die Liste zum Beispiel durch lucaswv Antwort wie vorgeschlagen erforderlich bekommen.
Zusätzlich zu den oben genannten, möchte ich auf den Missbrauch von Optional hinweisen. wenn Sie das tun:
...findFirst().get()
nicht anders ist es, ein Verfahren zu nennen, die null, sondern der Bewachung gegen null zurückkehren könnte, wenn die Methode ein Ergebnis zurückgibt werden Sie einfach eine andere Methode auf dem Rückgabewert dieser Methode aufrufen was zu einem NullPointerException
führen könnte.
Umgekehrt würde der Aufruf an get()
von einem Optional zu einem NoSuchElementException
führen, wenn kein Wert vorhanden ist; Daher ist es in den meisten Fällen nicht ideal, get()
direkt aus einem Optional Ergebnis zu verwenden.
Um eine solche Ausnahme zu verhindern, verwenden Sie OrElse, um den Wert zurückzugeben, falls vorhanden, andernfalls einen Standardwert anzugeben.
Offensichtlich ist Optional.get()
es für einen Grund, aber es ist ein Fehler, die von den API-Designer und daher würde ich empfehlen Sie immer orElse oder orElseGet abhängig von der Situation verwenden.
Gibt es Garantien für Nullbedingungen? (Nullname bedeutet Nullfarbe, etc.) Wenn nicht, dann gibt es wahrscheinlich keinen schnelleren Weg, dies mit Streams zu tun. – lucasvw
@lucasvw Es gibt keine Garantie für Null-Bedingungen, also denke ich, dass eine traditionelle Schleife in diesem Fall besser ist. Vielen Dank. – pike
Kein Problem. Wenn Sie meine Antwort akzeptieren könnten, die darauf hinweist, dass Ihre Frage beantwortet wurde, wäre das hilfreich. – lucasvw