空数组到空列表

Posted

技术标签:

【中文标题】空数组到空列表【英文标题】:Null array to empty list 【发布时间】:2015-01-31 19:32:54 【问题描述】:

Arrays.asList(E[] e)List 的形式返回数组视图,但当数组为空时,它会抛出 NullPointerException

Arrays.asList(null); //NullPointerException.

其实我在做

 List list = possibleNullArray != null ? Arrays.asList(possibleNullArray) : Collections.EMPTY_LIST;

但是,仅出于此目的在我的项目中创建实用程序类是我不愿意做的事情。是否有一些实用程序类或库(如 Apache Commons 或 Guava)将空数组转换为空 List? (即数组和集合之间的空安全转换器)。

你会如何解决这个问题?

【问题讨论】:

当然你会得到NPE,你将它设置为null,Arrays.asList();如果我没记错的话,将你的对象转换为数组/数组列表/数组的列表。 当您考虑到可读性时,使用空集合或零长度数组而不是 null 是一种很好的做法。我没有讨论为什么 Array.asList(null) 会抛出 NullPointerException。这是其创建者的设计决定。我询问一个实用程序类或库来将 null arras o 集合转换为空数组或集合。 如果您投反对票,请考虑给出理由。谢谢。 Arrays.asList() 和其他类似方法,例如如果传入的集合是nullnew ArrayList<>(...) 不应该抛出 NPE,它们应该返回一个空列表。在这种情况下抛出 NPE 非常荒谬。 【参考方案1】:

你可以使用 Java 8 Optional:

String[] arr = null;
List<String> list = Arrays.asList(Optional.ofNullable(arr).orElse(new String[0]));

【讨论】:

这个。在 Java 7 上,也可以使用 Guava 的 Optional。或者使用不同代码的相同概念 - Guava 的 Objects.firstNonNull()【参考方案2】:

您可以使用 Java 8 OptionalStream

Optional.ofNullable(possibleNullArray)
        .map(Arrays::stream)
        .orElseGet(Stream::empty)
        .collect(Collectors.toList())

【讨论】:

【参考方案3】:

我不知道 Apache Commons / Guava 中的任何 util 方法会从 null 创建一个空的 List 实例。

您可能做的最好的事情是预先初始化可能为空的数组,例如与ArrayUtils.nullToEmpty()。尽快摆脱 null。

SomeObject[] array = ArrayUtils.nullToEmpty(possiblyNullArray);

【讨论】:

另外,你有原始的List。我希望您的代码实际上是通用的。新代码中没有原始集合的位置。

以上是关于空数组到空列表的主要内容,如果未能解决你的问题,请参考以下文章

jquery 向空数组中添加元素,重复的就不添加到空数组中请问该如何编写

Azure Runbook 错误,AzureRmStorageAccountKey 无法索引到空数组

无法从函数返回的变量索引到空数组,或访问返回的正则表达式数据时出现问题

Azure Powershell Runbook - Get-AzureRMWebAppSlot SiteConfig.ConnectionStrings[0] 错误无法索引到空数组

未成功追加到空 NumPy 数组

如何在for循环中将数据附加到空列表?