确保所有集合元素都为非空的现有实用程序方法

时间:2016-04-05 16:34:16

标签: java java-8 guava

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值,但有时收集来自其他来源。

2 个答案:

答案 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);