3

代码 :

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

我也尝试了所有其他值。

4

5 回答 5

12

Arrays#asList返回一个泛型类型。

一种解决方案是将您的数组更改为,Integer而不是int

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

请参阅我找到的这个非常有用的链接。


Arrays#asList返回List<int[]>而不是List<Integer>(你想要什么 - 回想一下,没有这样的事情List<int>)。

另外,值得一提的是,如果 anint被装箱Integer,那么要小心..因为例如:Integer(11) != 11

于 2013-08-06T12:35:16.373 回答
7

Arrays.asListfor arg用一个元素int[]创建一个。List<int[]>这就是为什么 contains 不起作用

于 2013-08-06T12:44:00.813 回答
0

你需要:

Arrays.asList(11, 12, 13, 14, 15)
于 2013-08-06T12:46:38.210 回答
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>了这个考虑对象

于 2013-08-06T12:42:10.263 回答
0

使用Java 8 中引入的流 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));
于 2020-10-26T19:52:14.567 回答