Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决这个JDK限制?_Java_Collections_Null - Fatal编程技术网

Java 如何解决这个JDK限制?

Java 如何解决这个JDK限制?,java,collections,null,Java,Collections,Null,我正在从Java集合框架中寻找一个不允许空元素的类 您知道一个吗?大多数实现(显著的例外是)不接受null 是一种特殊用途的Set实现,不允许null值。哈希表不允许null键或值 使用约束: import com.google.common.collect.Constraints; ... Constraints.constrainedList(new ArrayList(), Constraints.notNull()) 从中获得最大的灵活性 更新:番石榴约束已在中被弃用-显然没有替换 更

我正在从Java集合框架中寻找一个不允许空元素的类

您知道一个吗?

大多数实现(显著的例外是)不接受
null


是一种特殊用途的
Set
实现,不允许
null
值。

哈希表不允许null键或值

使用
约束

import com.google.common.collect.Constraints;
...
Constraints.constrainedList(new ArrayList(), Constraints.notNull())
从中获得最大的灵活性

更新:番石榴约束已在中被弃用-显然没有替换

更新2:到目前为止(Guava 19.0-rc2)仍然存在,不再被弃用。然而,它却没有出现在地图上


我担心Javadoc是正确的,因为
mapsconstraint
在中也被弃用了。查看“另请参阅”部分。点击链接。允许或不允许null的决定是由实现类做出的;只需按照各个“请参阅”部分中的链接访问实现类(例如,HashMap),然后查看插入方法(通常是add、push或put的变体),看看该实现是否允许null。

这类集合有一个综述。

如果myObj不为null,则添加到myList


org.apache.commons.collections.CollectionUtils.addIgnoreNull(myList,myObj)
使用谷歌番石榴谓词(不推荐使用@Joachim Sauer的答案)


该怎么办?如果您只想忽略list.add(null),我会为您最喜欢的实现创建一个子类,覆盖add()并检查null值也许最好的方法是从一开始就不要插入null?容忍(并因此防止)空值通常是一种糟糕的做法。@leifg不仅覆盖add,还覆盖addAll!否则,您可能会遇到一个有趣的惊喜。+1是您的答案,但我想坚持使用Java框架;)好的,那么我可以从JDK向您提供例如
java.util.concurrent.ConcurrentSkipListSet
。或者
Collections.newSetFromMap(new ConcurrentHashMap())
。不幸的是
Constraints
在Guava 16.0:-(这很遗憾,
MapConstants
没有。
Constraints
仍然存在,并且不再被标记为已弃用。:-)对于我未来的项目,我一定会看看番石榴+我的天哪,那是过去的爆炸!它甚至不是
集合
,更不用说
列表了。
//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()));