如何检查一个列表是否包含所有元素均为空字符串?

3

我有一个LinkedList,格式如下:

List<String> tables = new LinkedList<String>();

有时,表格列表看起来像这样,意味着它内部有所有的空字符串值 -
[null, null]

有没有直接的方法来识别tables列表是否包含所有元素都是null字符串,如果是,则返回true,否则返回false。

我能想到的一种方法是不断迭代它并查看它是否具有null字符串,然后相应地返回true或false。

更新:-

public static void main(String[] args) {
String table_1 = null;
String table_2 = "hello";
List<String> tables = new LinkedList<String>();
tables.add(table_1);
tables.add(table_2);

boolean ss = isAllNull(tables);
System.out.println(ss);
}

public static boolean isAllNull(Iterable<?> list) {
for (Object obj : list) {
    if (obj != null)
    return false;
}

return true;
}

你认为的方式就是正确的方式。 - Sotirios Delimanolis
4个回答

2
如果您可以使用Guava库:
Iterables.all(input, Predicates.isNull());

使用静态导入,代码会变得更加易读:

import static com.google.common.base.Predicates.isNull;
import static com.google.common.collect.Iterables.all;

Iterable<?> input = ...
all(input, isNull())

1

你想法不错,如果将其作为实用类的一部分会更好。

public static boolean isAllNull(Iterable<?> list){
    for(Object obj : list){
        if(obj != null)
            return false;
    }

    return true;
}

请注意,此工具接受 Iterable 接口以使其在更广泛的范围内运作。

拥有Iterable<?>是否有任何好处,或者我们应该不要将List直接传递并进行迭代? - user2467545
是的,使用Iterable接口而不是List接口将使此实用程序方法能够与其他类型的Iterable实现(如SetQueueStack等)一起工作。这是一个实用工具,最好最大化多态性。 - Bnrdo
很好,谢谢你的提示。我已经更新了我的问题。你能否请检查一下我所做的方式是否正确?只需要第二个眼睛。 - user2467545
是的,这是正确的。在您给出的代码中,它将返回 false,因为 table_2 不是 null。如果您将 table_2 设置为 null,那么它将返回 true。 - Bnrdo

0

你是正确的,那就是解决方案。你可以检查是否有任何非空值,并在第一次出现时返回 false。

String table_1 = null;
String table_2 = null;
List<String> tables = new LinkedList<>();
tables.add(table_1);
tables.add(table_2);

for (String table : tables) {
    if (table != null)
    {System.out.println("False");}
}

0

不使用第三方库:

Set set = new HashSet(tables);
boolean allNull = set.size() == 1 && set.iterator().next() == null;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接