Nie, ta metoda nie istnieje w Guava i faktycznie znajduje się na naszym „cmentarzu pomysłów”.
Nie wierzymy, że „jest pusta lub pusta” to pytanie, które naprawdę chcesz zadać na temat kolekcji.
Jeśli kolekcja może mieć wartość null, a wartość null powinna być traktowana tak samo jak pusta, usuń całą tę niejednoznaczność z góry, na przykład:
Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
foos = ImmutableSet.of();
}
lub tak (jeśli wolisz):
Set<Foo> foos = MoreObjects.firstNonNull(
NaughtyClass.getFoos(), ImmutableSet.<Foo>of());
Następnie możesz po prostu użyć .isEmpty()
jak zwykle. Zrób to natychmiast po wywołaniu niegrzecznego API, a zostawisz za sobą dziwność, zamiast pozwalać jej trwać w nieskończoność.
A jeśli „null, które naprawdę oznacza pustą kolekcję”, nie jest zwracane do Ciebie, ale przekazywane do Ciebie, Twoja praca jest łatwa: po prostu pozwól, aby NullPointerException
został wyrzucony i nadaj rozmówcy kształt.
null
do pustej kolekcji tak szybko, jak to możliwe. Jeśli po prostu nie możesz, to w porządku, możesz być jednym z <1% użytkowników, którzy naprawdę chcą napisać własnego trywialnego pomocnika isNullOrEmpty (Collection).if (collection == null || collection.isEmpty())
w tych przypadkach, w których go potrzebujesz! Czy to takie złe?)Jedną z rzeczy, które można znaleźć w całej Guava, jest to, że są oni bardzo antagonistyczni w stosunku do
null
s. Autorzy chcą zniechęcić Cię do używanianull
tego, co prawdopodobnie robisz, a zapewnienie metod użytkowych, aby ułatwić korzystanie z nich,null
przyniosłoby efekt przeciwny do zamierzonego.Jeśli chcesz użyć paradygmatu Guavy, zastanów się, czy źródło tej kolekcji (lub tablicy) naprawdę powinno opcjonalnie zwrócić
null
. Jeśli nie, rozważ zaznaczenie tego@NonNull
i zwróć puste kolekcje zamiastnull
. Lub jako parametr funkcji, która nienull
oczekuje list -valued, rozważ użyciePreconditions.checkNotNull
, które zgłasza wyjątek, jeślinull
zostanie (nieoczekiwanie) przekazana.Jeśli
null
naprawdę jest to uzasadnione,list == null || list.isEmpty()
nie jest takie trudne.źródło
We wspólnych kolekcjach znajduje się CollectionUtils.isEmpty () .
źródło
Spring Framework posiada wyspecjalizowaną klasę użytkową o nazwie
CollectionUtils
. A metoda, której szukasz, to:org.springframework.util.CollectionUtils.isEmpty
. Zwraca wartość true dla null i pustych kolekcji.A dla tablic jest
org.springframework.util.ObjectUtils.isEmpty
metoda, która zachowuje się tak samo.źródło
Apache CollectionUtils 4 ma metodę CollectionUtils.emptyIfNull (), która zwraca pustą listę, jeśli kolekcja ma wartość null. Jest to bardzo przydatne w pętli foreach, więc nie musisz sprawdzać wartości null przed iteracją
źródło
Moje rozwiązanie to: MoreObjects.firstNonNull (list, Collections. EmptyList ())
Używam Guava MoreObjects z JDK Collections.
źródło
ImmutableList
.Spójrz na kolekcje Appache CollectionUtils.isEmpty () zwraca wartość true, jeśli kolekcja ma wartość null lub jest pusta
źródło