【问题标题】:Arrays.asList().contains() giving wrong resultArrays.asList().contains() 给出错误的结果
【发布时间】:2013-08-06 12:32:05
【问题描述】:

代码:

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

我也尝试了所有其他值。

【问题讨论】:

    标签: java arrays list


    【解决方案1】:

    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

    【讨论】:

    • 不应该 11 在他的情况下自动装箱吗?
    • 此更改将如何提供帮助。你能解释一下吗?如果他使用的是 java 5 或更高版本,自动装箱应该会解决这个问题。
    • @Ankur。 int[] 未自动装箱为 Integer[]。只有int 可以自动装箱到Integer
    • 没有。自动装箱不会解决这个问题。看看 Evgeniy Dorofeev 的回答
    • 谢谢@MarounMaroun。是的,我明白了。 :-)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你应该如下使用

         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>,因此请考虑对象

      【讨论】:

        【解决方案4】:

        你需要:

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

        【讨论】:

          【解决方案5】:

          使用 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));
          

          【讨论】:

            猜你喜欢
            • 2011-05-17
            • 2014-09-16
            • 2011-11-15
            • 2019-02-06
            • 2014-01-30
            • 2018-08-01
            • 2016-08-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多