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

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

在Java中,我有以下方法:

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

我想检查一下

keys

  • 不是
    null
    本身;和
  • 不为空(
    size() == 0
    );和
  • 不存在任何
    String
    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("")
的最后 2 个检查是不正确的,并且可能会引发运行时异常。 我知道,我可以循环遍历
if
语句内的列表,并检查那里是否有空值/空值,但我正在寻找更优雅的解决方案(如果存在)。

java string collections
9个回答
41
投票
 keys.contains(null) || keys.contains("")

如果您的列表有 null(或)空字符串,则不会抛出任何运行时异常和结果。

    


9
投票

true



7
投票
public String normalizeList(List<String> keys) { boolean bad = keys.stream().anyMatch(s -> (s == null || s.equals(""))); if(bad) { //... do whatever you want to do } }

keys.contains(null)
得到的唯一例外是
keys.contains("")
本身是
keys

但是,既然您首先检查了这一点,您就知道此时

null

不是

keys
,因此不会发生运行时异常。
    


1
投票
org.springframework.util.CollectionUtils

你可以应用这个 null

对于不可变集合,它不会像 List.of() 那样抛出 NullPointerException。


0
投票


0
投票

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



0
投票

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; }

在此处查看 StringUtils 文档:

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html


0
投票

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

所以要使用 Aniket 的评论来调整你原来的解决方案:

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



0
投票
	
© www.soinside.com 2019 - 2024. All rights reserved.