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

s2j5cfk0  于 2023-03-16  发布在  Java
关注(0)|答案(9)|浏览(196)

在Java中,我有以下方法:

public String normalizeList(List<String> keys) {
    // ...
}

我要检查keys

  • 不是null本身;以及
  • 不为空(size() == 0);以及
  • 没有任何null元素;以及
  • 没有任何空的String元素(“”)

这是一个实用方法,将放在一个“commons”样式的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...
}

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

ne5o7dgx

ne5o7dgx1#

我不确定,但是ApacheCommons库中是否有任何帮助类可以做到这一点?例如,当您有一个字符串的isEmpty,而在ApacheCommons库中有isNullOrEmpty时

iugsix8n

iugsix8n2#

一次检查清单

public static boolean empty(String s) {
    if (s == null)
      return true;
    else if (s.length() == 0)
      return true;
    return false;
  }  

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

    // Rest of method...
    return null;
  }
6yjfywim

6yjfywim3#

你也可以使用ApacheStringUtils检查字符串是否为空,这将检查null、Emptystring,并修剪你的值。

if(StringUtils.isBlank(listItemString)){...}

在此查看StringUtils文档:
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

b1payxdu

b1payxdu4#

Aniket作为评论对此给出了一个真的很好的答案:

if( keys.stream().anyMatch(String::isBlank) ) { .... String::isBlank is since Java11. – 
Aniket Sahrawat
Apr 6, 2019 at 2:30

因此,使用Aniket的评论来调整您的原始解决方案:

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

    // Rest of method...
}
vh0rcniy

vh0rcniy5#

boolean badListInRequest = CollectionUtils.isEmpty(request.getIdList()) ||
                request.getIdList().stream().anyMatch(s -> (StringUtils.isBlank(s)));

if(badListInRequest){
    throw new Exception...
}
nfg76nw0

nfg76nw06#

keys.contains(null) || keys.contains("")

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

8cdiaqws

8cdiaqws7#

这在我看来很好,从keys.contains(null)keys.contains("")中得到的唯一例外是keys本身是null
但是,由于您首先检查了它,因此您知道此时keys不是null,因此不会发生运行时异常。

u5rb5r59

u5rb5r598#

使用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
    }
}
6ie5vjzr

6ie5vjzr9#

如果您可以使用org.springframework.util.CollectionUtils,则可以应用此命令

if(CollectionUtils.isEmpty(coll) || CollectionUtils.containsInstance(coll, null)) {
        // throw ...;
}

它不会将不可变集合作为List.of()抛出NullPointerException。

相关问题