如何解决这个JDK限制?
我正在从Java集合框架中寻找一个不允许空元素的类。
你知道吗?
大多数Queue
实现(具有LinkedList
的显着exception)不接受null
。
EnumSet
是一个不允许null
值的特殊用途的Set
实现。
使用Constraints
:
import com.google.common.collect.Constraints; ... Constraints.constrainedList(new ArrayList(), Constraints.notNull())
从番石榴获得最大的灵活性。
更新:番石榴约束已被弃用在版本15 – 显然没有更换。
更新2:截至目前(番石榴19.0 – rc2) 约束仍然存在,不再弃用。 但是,它从Javadoc中丢失了。
我担心Javadoc是正确的,因为MapConstraint
已经在Release 19中被弃用了
这里有一个这样的集合的综述。
Apache Commons框架 – CollectionUtils.addIgnoreNull
如果myObj不为null,则添加到myList。
org.apache.commons.collections.CollectionUtils.addIgnoreNull(myList, myObj)
使用Google Guava Predicates(@Joachim Sauer的回答已被弃用)
//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()));
散列表不允许空键或值。
从这里开始,收集API页面 。 看看“另请参阅”部分。 按照链接。 执行类决定允许还是不允许null ; 只需按照各种“请参阅”部分中的链接进入实现类(例如HashMap),然后查看插入方法(通常是添加,推送或放置的变体),以查看该实现是否允许为空 。