2014-12-03 80 views
13

Arrays.asList(E[] e)返回數組的視圖爲List,但是當數組爲空時,將拋出NullPointerException空數組爲空列表

Arrays.asList(null); //NullPointerException. 

其實我在做

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

但是,僅僅爲了這個目的建立在我的項目一個實用工具類,是我不喜歡做的事情。是否有一些實用程序類,或者像Apache Commons或Guava這樣的庫將空數組轉換爲空List? (即在數組和集合之間的空安全轉換器)。

你會如何解決這個問題?

+0

ofcourse你會得到NPE將它設置爲空,Arrays.asList();如果我沒有弄錯的話,將你的對象轉換爲array/arraylist/array列表。 – Secondo 2014-12-03 09:51:36

+0

當你有可讀性時,使用空集合o零長度數組而不是null是一個很好的練習。我沒有在討論爲什麼Array.asList(null)拋出一個NullPointerException。這是它的創造者的決定性決定。我問一個實用程序類或庫將空arras或集合轉換爲空數組或集合。 – Ezequiel 2014-12-03 09:57:05

+0

試試看我的回答 – Secondo 2014-12-03 10:01:40

回答

8

我不知道在Apache的百科全書任何util的方法/番石榴,將創建一個空的List實例出空的。

您可能做的最好的事情是事先初始化可能爲null的數組,例如,與ArrayUtils.nullToEmpty()。儘快擺脫空。

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

另外,你有原始'列表'那裏。我希望你的代碼實際上被聚合。新代碼中沒有原始集合的地方。 – 2014-12-03 10:03:52

+1

我接受你的答案,因爲我認爲這是一個很好的方法來標準化從你不控制的其他代碼片段收到的參數。 – Ezequiel 2014-12-03 10:12:28

+0

@Slanec指出這個答案並不理想。 – 2016-12-12 06:14:36

29

您可以使用Java 8 Optional

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

這個。在Java 7上,也可以使用Guava的'Optional'。或者使用不同代碼的相同概念 - 番石榴的'Objects.firstNonNull()' – 2014-12-03 10:05:33

+0

感謝您的回覆,我向您致謝,但認爲Slanec答案更符合我的問題。 – Ezequiel 2014-12-03 10:14:32

7

您可以使用Java 8 OptionalStream

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