Ich bin neu bei Java8. Ich habe Listen und Filter implementiert. Ich habe einen Null-Check in meinem Code durchgeführt. Ich würde etwas Hilfe bei der Überprüfung, ob die Liste in dem gleichen Codeausschnitt nicht leer ist, schätzen. Wenn die Liste nicht leer ist, sollte der Code mit der Assertion fortfahren.
%Vor%Sie stellen eine veraltete Frage. Streams verarbeiten alle Elemente einer Quelle. Wenn keine Elemente vorhanden sind, wird keine Aktion ausgeführt. Daher müssen Sie nicht überprüfen, ob die Liste leer ist.
Trotzdem können Sie Ihren Code vereinfachen:
%Vor%oder
%Vor% allMatch
folgt den für diese Überprüfung erforderlichen Regeln. Wenn es keine Elemente gibt, gibt es kein widersprüchliches Element, daher all . Beachten Sie, dass listElement -> listElement.getCandyType()
auch durch eine Methodenreferenz der Form ClassName::getCandyType
ersetzt werden kann. Ich habe es hier nicht gemacht, da ich den korrekten Klassennamen nicht kenne.
Es gibt keinen Leistungsunterschied zwischen beiden Varianten. allMatch
wird sofort zurückgegeben, wenn das erste nicht übereinstimmende Element gefunden wird, und assertEquals
wird auf das erste nicht übereinstimmende Element geworfen. Im zweiten Fall zeigt der Stack-Trace keine Artefakte der Stream-API-Implementierung.
Der zweite wird bevorzugt, wenn Sie anstelle von Komponententests Prüfungen für Produktionscode bereitstellen und diese Prüfungen wie im Java-Feature assert
z. B.
, da diese Form garantiert, dass es keinen Overhead gibt, wenn Assertionen ausgeschaltet sind, während die erste Variante, die eine assert
Anweisung mit der forEach
Aktion hat, immer noch über alle Elemente iterieren und die Zwischenschritte der Pipeline.
Die gewählte Antwort ist großartig, nur ein kleiner Vorschlag, um einen Fall mit Optional.ofNullable
des , der neu in Java8 eingeführt wurde, zu behandeln Klasse :
Die Behauptung, dass die Liste leer ist, ist eine andere Sache als die Behauptung, dass irgendein bestimmtes Element der Liste irgendeine Form hat (d. h. getCandyType() == ValueType.CANDY
). Es ist einfach nicht der richtige Weg, die beiden Ideen miteinander zu verbinden.
Sie müssen eine zweite Assertion vor oder nach dem forEach
hinzufügen, was
... oder etwas Ähnliches.
Einer der wichtigsten Punkte bei leeren Listen ist, dass sie genauso verarbeitet werden können wie Listen mit Elementen. Dies ist, warum Dinge wie die Optionale Klasse und die Null Muster existieren. Wenn Sie also wirklich darauf achten, dass die Liste leer ist, sollten Sie eine separate, eindeutige Behauptung machen.
Tags und Links java-8 filter java-stream empty-list