2013-08-06 100 views
3

代碼:Arrays.asList()包含(),給出錯誤的結果

private static final int[] GOOGLE_DIRECTION_ID_FOR_MATCH = { 11, 12, 13, 
      14, 15 }; 
Log.e(TAG, "index : " 
         + Arrays.asList(GOOGLE_DIRECTION_ID_FOR_MATCH).indexOf(11)); 

Log.e(TAG, "contains : " 
         + Arrays.asList(GOOGLE_DIRECTION_ID_FOR_MATCH) 
           .contains(11)); 

上述聲明日誌:

index : -1 
contains : false 

我嘗試了所有其他值了。

回答

12

Arrays#asList返回一個通用類型。

一種解決方案是你的陣列更改Integer,而不是int

private static final Integer[] GOOGLE_DIRECTION_ID_FOR_MATCH = { 11, 12, 13, 
      14, 15 }; 

看到這個very useful link我發現。


Arrays#asList回報List<int[]>,而不是List<Integer>(你想要什麼 - 回想一下,有沒有這樣的事情List<int>)。

此外,這是很好的一提的是,如果一個int是盒裝到Integer,那麼要小心。因爲例如:Integer(11)=11

+0

不應該'11' autoboxed在他的案件? –

+0

此更改將如何提供幫助。你能解釋一下嗎?如果他使用java 5或更高版本,自動裝箱應該照顧這一點。 –

+1

@Ankur。 'int []'不會自動寫入到'Integer []'中。只有'int'可以autobox到'Integer'。 –

0

你應該如下

Integer[] GOOGLE_DIRECTION_ID_FOR_MATCH = { 11, 12, 13,14, 15 }; 
    System.out.println((Arrays.asList(GOOGLE_DIRECTION_ID_FOR_MATCH)).indexOf(11)); 
    System.out.println((Arrays.asList(GOOGLE_DIRECTION_ID_FOR_MATCH)).contains(11)); 

使用,因爲我們定義List<Integer>認爲這是有關對象

7

Arrays.asListint[] ARG創建List<int[]>一個元素。這就是爲什麼包含不工作

0

您需要:

Arrays.asList(11, 12, 13, 14, 15)