Java 8标准库或Guava中是否存在现有的实用程序方法确保集合不为null且每个元素(如果有)都不为空?
喜欢"集合版本" Objects.requireNonNull()
。
public static void requireAllNonNull(final Collection<?> collection) {
Objects.requireNonNull(collection, "Collection must not be null");
if (collection.stream().anyMatch(Objects::isNull)) {
throw new NullPointerException("Collection elements must not be null");
}
}
但问题是它必须在不同(无关)的项目中重复。
一种替代方法是仅使用Guava's immutable collections根本不允许null
值,但有时收集来自其他来源。
答案 0 :(得分:3)
如果您只是想要抛出NPE
,最简单的方法可能就是尝试创建一个Guava ImmutableCollection
,它要求所有元素都为非null(例如ImmutableList):
ImmutableList.copyOf(collection);
就检查的null元素而言,Guava有:
boolean allNonNull = Iterables.all(collection, Predicates.notNull());
checkArgument(allNonNull, "collection had null element");
但由于检查时间/使用时间漏洞,您通常最好先复制到不可变的集合。如果通过迭代可变集合来检查不变量,那么在验证它之后,有人可能会更改集合。
ImmutableList#copyOf
还有额外的性能考虑因素,如果它已经传入了ImmutableList
,它只会返回该列表以消除任何开销。
答案 1 :(得分:3)
如果您想要的是Objects.requireNonNull
,您可以这样做:
myCollection.forEach(Objects::requireNonNull);