如何确定字符串列表是否包含null或空元素

IAm*_*aja 17 java string collections

在Java中,我有以下方法:

public String normalizeList(List<String> keys) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想检查一下keys:

  • 不是null自己; 和
  • 不是空的(size() == 0); 和
  • 没有任何String元素null; 和
  • 没有任何String空元素("")

这是一个实用的方法,将进入"公共"式JAR(类将类似DataUtils).这是我的,但我认为它不正确:

public String normalize(List<String> keys) {
    if(keys == null || keys.size() == 0 || keys.contains(null) || keys.contains(""))
        throw new IllegalArgumentException("Bad!");

    // Rest of method...
}
Run Code Online (Sandbox Code Playgroud)

我相信最后2次检查keys.contains(null)并且keys.contains("")不正确,可能会抛出运行时异常.我知道我可以循环遍历if语句中的列表,并检查那里的空值/空值,但我正在寻找一个更优雅的解决方案,如果它存在.

kos*_*osa 34

 keys.contains(null) || keys.contains("")
Run Code Online (Sandbox Code Playgroud)

true如果列表具有null(或)空String,则不会抛出任何运行时异常和结果.

  • 这个解决方案的问题是,如果列表不允许包含“null”,则“List.contains”可以抛出“NullPointerException”。例如:`List.of("foo", "bar").contains(null)`将会抛出异常! (10认同)

cal*_*-me 8

使用 java 8 你可以这样做:

public String normalizeList(List<String> keys) {
    boolean bad = keys.stream().anyMatch(s -> (s == null || s.equals("")));
    if(bad) {
        //... do whatever you want to do
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `if(keys.stream().anyMatch(String::isBlank)) { ...`。`String::isBlank` 是从 Java11 开始的。 (3认同)

Nom*_*Sim 5

对我来说这看起来很好,你可以得到的唯一例外keys.contains(null),keys.contains("")如果keys它本身就是null.

但是,由于您首先检查了这一点,因此您知道此时keys不会null,因此不会发生运行时异常.