Arrays.asList()。contains()给出错误的结果

时间:2013-08-06 12:32:06

标签: java arrays list

代码:

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

我也尝试了所有其他值。

5 个答案:

答案 0 :(得分: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) != {{1} }。

答案 1 :(得分:7)

对于Arrays.asList arg,

int[]会创建一个包含一个元素的List<int[]>。这就是为什么包含不工作

答案 2 :(得分: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>,所以考虑对象

答案 3 :(得分:0)

你需要:

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

答案 4 :(得分:0)

使用Java 8中引入的stream API的解决方案。

List<Integer> list = Arrays.stream(GOOGLE_DIRECTION_ID_FOR_MATCH)
                           .boxed()
                           .collect(Collectors.toList());
System.out.println("index: " + list.indexOf(11));
System.out.println("contains: " + list.contains(11));