9

我认为必须有更好的方法来做到这一点。我调用了一个返回 ArrayList 的函数。如果该 ArrayList 仅返回 10 个空项(默认值),是否有办法检查这一点而无需遍历所有 10 个项以查看它们是否为空?

4

7 回答 7

25

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

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

这等于:

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

在这里,您可以看到更通用的测试任何列表是否匹配给定Predicate的方法:

list.stream().allMatch(x -> /* Some testing function. */)
于 2017-04-11T11:49:46.320 回答
8

一般来说,没有;没有其他方法可以告诉任意 ArrayList 包含十个nullthan 实例来循环遍历它并确保每个元素都是null. 当然,如果列表的 size() 不等于 10,您可以放弃这一点。

于 2013-01-04T18:14:40.313 回答
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

那是你想要的吗?

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

于 2013-01-04T18:14:59.457 回答
2

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

boolean isListOfNulls(List myList){
    for(Object o: myList)
        if(!(o == null))
            return false;
    return true;
}
于 2013-01-04T18:14:29.903 回答
1

尝试使用流 API。

boolean haveOnlyNulls = arraylist.stream().noneMatch(object -> object != null);
于 2016-06-29T10:41:55.563 回答
1

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

 boolean hasAllNulls = list.stream().allMatch(Objects::isNull)
于 2021-08-17T09:31:17.087 回答
0

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

于 2013-01-04T21:38:30.093 回答