检查数组列表是否仅包含空值

问题描述 投票:0回答:7

我认为必须有更好的方法来做到这一点。

我调用了一个返回

ArrayList
的函数。

如果

ArrayList
只返回 10 个空项目(默认),是否有一种方法可以检查这一点,而无需迭代所有 10 个项目来查看它们是否为空?

java arraylist
7个回答
31
投票

从 Java 8 开始,您可以像这样使用 Streams

boolean nullsOnly = list.stream().noneMatch(Objects::nonNull);

等于:

boolean nullsOnly = list.stream().allMatch(x -> x == null)

在这里您可以看到测试任何列表与给定谓词匹配的更通用方法:

list.stream().allMatch(x -> /* Some testing function. */)

8
投票

一般来说,不会;除了循环遍历并确保每个元素都是

null
之外,没有其他方法可以判断任意 ArrayList 包含十个
null
实例。当然,如果列表的 size() 不等于 10,您可以放弃这一点。


3
投票
List<Object> arrayList = new ArrayList<Object>();

arrayList.isEmpty();
// first call returns true    

arrayList.add(null);
// second call returns false    
Object obj = new Object();

arrayList.add(obj);

arrayList.isEmpty();
// third call returns false

这就是你想要的吗?

多次添加空值会使大小增加一,但是没有一种具体的“简单方法”来查找空对象的数量,除非循环数组列表。


2
投票

您是否想检查 ArrayList 是否为空? (即

myArrayList.isEmpty()
)或者您是否试图检查 ArrayList 是否仅包含空引用?如果您尝试检查所有条目是否为空,那么您将需要检查每个条目...

boolean isListOfNulls(List myList){
    for(Object o: myList)
        if(!(o == null))
            return false;
    return true;
}

1
投票

尝试使用流 API。

boolean haveOnlyNulls = arraylist.stream().noneMatch(object -> object != null);

1
投票

最好的检查方法是使用

boolean allMatch(Predicate<? super T> predicate);
这 返回此流的所有元素是否与提供的谓词匹配。如果不需要确定结果,则可能不会评估所有元素上的谓词。如果流为空,则返回 true 并且不评估谓词。

 boolean hasAllNulls = list.stream().allMatch(Objects::isNull)

0
投票

将默认值更改为空 ArrayList 并使用 isEmpty()。目前的默认设置毫无意义。

© www.soinside.com 2019 - 2024. All rights reserved.