Es gibt keine Methode namens "Stream # isEmpty", daher weiß ich nicht, wie ich es am besten schreiben soll, also schreibe ich es in Qiita.
Zunächst würde ich in normalen Zeiten wie folgt schreiben.
list.stream()
.anyMatch(Bedingung Lambda-Ausdruck oder Methodenreferenz);
Aber wie soll ich diesmal schreiben, wenn ich nur ein Urteil wie "List # isEmpty" für "Stream" fällen möchte? Es ist eine Geschichte.
Zum Beispiel möchte ich nur beurteilen, ob es in Stream
ein Ergebnis gibt, das durch Abfragen mit Doma2 zurückgegeben wurde. Darf verwenden.
Daher weiß ich nicht, welche Antwort die beste ist, aber ich schreibe das Muster, über das ich nachgedacht habe.
Auf den ersten Blick mag es ein wenig beängstigend sein.
boolean notEmpty = stream()
.anyMatch(e -> true);
System.out.println(notEmpty);
Iterator#hasNext
Eindruck, dass Sie ohne die erklärenden Variablen nicht wissen, was Sie tun möchten.
boolean notEmpty = stream()
.iterator()
.hasNext();
System.out.println(notEmpty);
Optional#isPresent
Hmm.
boolean notEmpty = stream()
.findAny()
.isPresent();
System.out.println(notEmpty);
count
NG, weil es viel Abfall gibt.
boolean notEmpty = stream()
.count() > 0;
System.out.println(notEmpty);
Das ist noch besser.
//Immer noch besser
boolean notEmpty = stream()
.limit(1)
.count() > 0;
System.out.println(notEmpty);
toList
Das ist auch verschwenderisch, also NG.
boolean notEmpty = !stream()
.collect(Collectors.toList())
.isEmpty();
System.out.println(notEmpty);
Ist das Muster "Iterator # hasNext" nicht gut für die Effizienz? (Besonders wenn mit Doma2 verwendet) Wenn es diese Szene gibt, würde ich sie mit "anyMatch (e-> true)" schreiben, was am einfachsten zu sein scheint, ohne an irgendetwas zu denken.
Recommended Posts