Szukam klasy z Java Collection Framework, która nie zezwala na wartości NULL.Jak obejść to ograniczenie JDK?
Czy znasz jeden?
Szukam klasy z Java Collection Framework, która nie zezwala na wartości NULL.Jak obejść to ograniczenie JDK?
Czy znasz jeden?
Większość implementacji Queue
(z wyraźnym wyjątkiem LinkedList
) nie akceptuje null
.
EnumSet
to specjalna implementacja Set
, która nie dopuszcza wartości null
.
'EnumSet' działa tylko z wyliczeniami ... –
Hashtable nie zezwala na puste klucze ani wartości.
moja dobroć, to podmuch z przeszłości! To nawet nie jest "Kolekcja", nie mówiąc już o "liście". – fommil
Zastosowanie Constraints
:
import com.google.common.collect.Constraints;
...
Constraints.constrainedList(new ArrayList(), Constraints.notNull())
z Guava maksymalnej elastyczności.
AKTUALIZACJA: Ograniczenia Guava zostały uznane za przestarzałe w Release 15 - najwyraźniej bez wymiany.
AKTUALIZACJA 2: Od tej chwili (Guava 19.0-rc2) Constrains jest nadal dostępny i nie jest przestarzały. Jednak go brakuje w Javadoc.
Obawiam się, że ma rację Javadoc jak MapConstraint
były przestarzałe w Release 19 też
+1 za odpowiedź, ale chcę trzymać się Java Framework;) – Stephan
OK, a następnie mogę zaoferować np. 'java.util.concurrent.ConcurrentSkipListSet' od JDK. Lub 'Collections.newSetFromMap (new ConcurrentHashMap
Niestety, 'Ograniczenia' są nieaktualne i zaplanowane do usunięcia w Guava 16.0 :-( –
start here, the Collections API Page. Sprawdź sekcję "Zobacz także". Śledź linki. Decyzja o zezwoleniu lub zabronieniu jest podejmowana przez klasę implementującą; po prostu podążaj za łączami w różnych sekcjach "Zobacz także", aby dostać się do klas implementujących (na przykład HashMap), a następnie spójrz na metody wstawiania (zazwyczaj odmiany na dodawanie, pchanie lub wstawianie), aby sprawdzić, czy ta implementacja umożliwia null.
Apache Commons Framework - CollectionUtils.addIgnoreNull
Dodaje do mylist jeśli myObj nie jest null.
org.apache.commons.collections.CollectionUtils.addIgnoreNull(myList, myObj)
Korzystanie z Google Guava predykaty (odpowiedź z @Joachim Sauer jest przestarzała)
//list is the variable where we want to remove null elements
List nullRemovedList=Lists.newArrayList(Iterables.filter(list, Predicates.notNull()));
//Or convert to Immutable list
List nullRemovedList2=ImmutableList.copyOf(Iterables.filter(list, Predicates.notNull()));
Co się stało? Jeśli chcesz tylko zignorować list.add (null), utworzę podklasę twojej ulubionej implementacji, nadpisam add() i sprawdzę wartość pustą – leifg
Być może lepszym sposobem na to jest nigdy nie wstawiać wartości null w pierwszej kolejności? Tolerowanie (i tym samym ochrona przed) wartościami null jest zwykle kiepską praktyką. –
@leifg Nie tylko nadpisuj add, ale także addAll! W przeciwnym razie możesz spodziewać się interesującej niespodzianki. – Voo