空数组到空列表
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()
和其他类似方法,例如如果传入的集合是null
,new 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 Optional
和Stream
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] 错误无法索引到空数组