Prüfen, ob eine Liste in Java leer ist 8

7

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%     
Drools_user 22.12.2015, 23:21
quelle

4 Antworten

13

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.

deaktivieren %Vor%

, 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.

    
Holger 23.12.2015, 12:45
quelle
6

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 :

%Vor%     
Stas 29.08.2016 15:02
quelle
5

Überprüfen Sie die Methode isEmpty

%Vor%

Hier ist das Dokument: Ссылка

    
Buddy 22.12.2015 23:24
quelle
1

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

bedeutet %Vor%

... 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.

    
sisyphus 23.12.2015 01:32
quelle