2013-08-06 83 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)