Nein, diese Methode gibt es in Guave nicht und sie befindet sich tatsächlich auf unserem "Ideenfriedhof".
Wir glauben nicht, dass "null oder leer" eine Frage ist, die Sie jemals wirklich zu einer Sammlung stellen möchten.
Wenn eine Sammlung null sein könnte und null genauso wie leer behandelt werden sollte, sollten Sie all diese Unklarheiten wie folgt aus dem Weg räumen:
Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
foos = ImmutableSet.of();
}
oder so (wenn Sie es vorziehen):
Set<Foo> foos = MoreObjects.firstNonNull(
NaughtyClass.getFoos(), ImmutableSet.<Foo>of());
Danach können Sie einfach .isEmpty()
wie gewohnt verwenden. Tun Sie dies sofort, nachdem Sie die ungezogene API aufgerufen haben, und Sie haben die Verrücktheit hinter sich gelassen, anstatt sie unbegrenzt weiterlaufen zu lassen.
Und wenn die "Null, die wirklich leere Sammlung bedeutet" nicht an Sie zurückgegeben, sondern an Sie übergeben wird, ist Ihre Aufgabe einfach: Lassen Sie einfach einen NullPointerException
werfen und lassen Sie diesen Anrufer in Form kommen.
null
Sie so schnell wie möglich auf eine leere Sammlung normalisieren . Wenn Sie es einfach nicht können, dann sind Sie vielleicht einer der <1% der Benutzer, die wirklich ihren eigenen trivialen isNullOrEmpty (Collection) -Helfer schreiben möchten.if (collection == null || collection.isEmpty())
Sie einfach in den Fällen , in denen Sie es brauchen! Ist das so schlimm?)Eine Sache, die Sie in ganz Guave finden werden, ist, dass sie sehr antagonistisch gegenüber
null
s sind. Die Autoren möchten Sie davon abhalten,null
so viel wie möglich zu verwenden, und Dienstprogrammmethoden bereitstellen, um die Verwendung zu vereinfachennull
wäre gegen dieses Ziel kontraproduktiv.Wenn Sie das Guava-Paradigma verwenden möchten, überlegen Sie, ob die Quelle dieser Sammlung (oder dieses Arrays) wirklich optional zurückgegeben werden sollte
null
. Wenn nicht, markieren Sie es@NonNull
und geben Sie stattdessen leere Sammlungen zurücknull
. Oder als Parameter für eine Funktion, dienull
Listen ohne Wert erwartet , sollten Sie die Verwendung in Betracht ziehenPreconditions.checkNotNull
, die eine Ausnahme auslöst, wenn anull
(unerwartet) übergeben wird.Wenn es
null
wirklich legitim ist,list == null || list.isEmpty()
ist es nicht so schwer.quelle
Es gibt eine CollectionUtils.isEmpty () in Commons-Sammlungen.
quelle
Spring Framework hat eine spezialisierte Util-Klasse namens
CollectionUtils
. Und die Methode, die Sie suchen, ist :org.springframework.util.CollectionUtils.isEmpty
. Es gibt true für null und leere Sammlungen zurück.Und für Arrays gibt es eine
org.springframework.util.ObjectUtils.isEmpty
Methode, die sich ziemlich gleich verhält.quelle
Apache CollectionUtils 4 verfügt über eine Methode CollectionUtils.emptyIfNull () , die eine leere Liste zurückgibt, wenn die Sammlung null ist. Dies ist in einer foreach-Schleife sehr nützlich, sodass Sie vor dem Iterieren keine Nullprüfung durchführen müssen
quelle
Meine Lösung lautet: MoreObjects.firstNonNull (Liste, Sammlungen. Leere Liste ())
Ich verwende Guava MoreObjects mit JDK-Sammlungen.
quelle
ImmutableList
.Schauen Sie sich Appache Collections CollectionUtils.isEmpty () an, das true zurückgibt, wenn die Auflistung null oder leer ist
quelle