Die Prüfung, ob eine Liste leer ist, in java 8
Ich bin neu in Java8. Ich habe implementiert, Listen und Filter. Ich habe eine null-check in meinem code. Ich würde schätzen etwas Hilfe mit, wie Sie überprüfen, wenn die Liste nicht leer ist, in der gleichen code-snippet. Wenn die Liste nicht leer ist, dann sollte der code gehen Sie mit der Behauptung.
list.stream().filter(listElement -> listElement != null).
forEach((listElement) -> Assert.assertEquals(
ValueType.CANDY,
listElement.getCandyType()));
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du fragst eine obsolete Frage. Streams verarbeiten alle Elemente einer Quelle, daher, falls es keine Elemente, keine Maßnahmen ergriffen werden. Daher brauchen Sie nicht zu überprüfen, ob die Liste leer ist.
Immer noch, können Sie den code vereinfachen:
oder
allMatch
folgt den Regeln erforderlich ist, die für diese Prüfung. Wenn es keine Elemente gibt es keine unvereinbaren element, daher alle match -. Beachten Sie, dasslistElement -> listElement.getCandyType()
auch ersetzt werden kann durch ein Verfahren, Verweis auf die formClassName::getCandyType
; ich habe es nicht hier, wie ich weiß nicht die richtige Klasse name.Gibt es keine performance-Unterschied zwischen den beiden Varianten.
allMatch
wird sofort wieder bei der Begegnung mit dem ersten nicht-übereinstimmenden element, undassertEquals
werfen auf dem ersten nicht übereinstimmenden Elemente. Im zweiten Fall, der stack-trace nicht angezeigt werden Artefakte der stream-API-Implementierung.Die zweite ist vorzuziehen, wenn Sie die Prüfungen für die Produktion von code eher als unit-tests und lassen Sie diese Prüfungen aus, wie mit der Java-Sprache
assert
Funktion, z.B.da diese form garantiert, dass es keinen overhead, wenn assertions abgeschaltet sind, in der Erwägung, dass die erste Variante, mit einer
assert
- Anweisung mit derforEach
Aktion immer noch bewirken, dass der Iteration über alle Elemente und Durchführung der zwischen-Schritte der pipeline.Die gewählte Antwort ist Super, nur eine kleine Anregung zum behandeln von null-Fall mit
Optional.ofNullable
des neu eingeführt Java8 Optional Klasse:Check-out die
isEmpty
MethodeHier ist der doc: https://docs.oracle.com/javase/7/docs/api/java/util/List.html#isEmpty()
Behaupten, dass die Liste leer ist, ist eine andere Sache durchzusetzen, dass ein bestimmtes element der Liste hat eine form (d.h.
getCandyType() == ValueType.CANDY
). Versuchen, binden Sie die zwei Ideen, die immer zusammen ist einfach nicht der richtige Weg, Dinge zu tun.Was Sie tun müssen, ist, um eine zweite Behauptung, die entweder vor oder nach der
forEach
, die nicht... oder etwas ähnliches.
Einer der wichtigsten Punkte, über leere Listen ist, dass Sie verarbeitet werden können in der gleichen Weise wie Listen, die Elemente enthalten. Dies ist, warum Dinge wie die Optional Klasse und die Null-Muster vorhanden. Also, wenn Sie wirklich darauf, dass die Liste leer ist Sie wirklich sollte machen es eine eigenständige Behauptung.
not(equalTo(Boolean.FALSE))
ist durchaus eine verschleierte Art und Weise zu sagen:true
...IsEmptyCollection.empty()
matcher -assertThat(list, not(empty()))
.