【问题标题】:Trying to convert array of ints to a list试图将整数数组转换为列表
【发布时间】:2013-04-27 23:31:33
【问题描述】:

我正在尝试通过执行将 int 类型的数组转换为 List

List<Integer> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);

但由于某种原因,我不断收到错误提示

Type mismatch: cannot convert from List<int[]> to List<Integer>

我不明白问题是什么。

我知道做

List<int[]> endingRoutesBusStopsList = Arrays.asList(endingRoutesBusStops);

会解决错误,但是我不能按照我想要的方式使用它。

有人有什么想法吗?

【问题讨论】:

  • 你是如何创建endingRoutesBusStops的?你能显示更多代码吗?
  • 我敢肯定这个问题有几个重复:带有可变参数的重载会让每个人都失望......
  • 整数列表不同于整数数组列表
  • 这个帖子有同样的问题有一个很好的解决方案stackoverflow.com/questions/2607289/…
  • 这里我们开始:Arrays.asList() of an array的可能重复

标签: java arrays list


【解决方案1】:

这是因为int[]Integer[] 不同。自动装箱不适用于 Arrays。

【讨论】:

    【解决方案2】:

    问题是因为“int[]”是一个对象,

    Arrays.asList(T...) 获取泛型 vararg,这意味着它将“int[]”视为“Object”(数组 int[] 和 Integer 的通用超类是 Object)

    所以从 asList 方法的角度来看,您不会传递整数数组,而是传递一个对象。

    您应该以任何方式进行从 int 到包装 Integer 的隐式转换。建议明确说明。

    【讨论】:

      【解决方案3】:

      我们缺少更多您的代码,但总的来说,让我尝试用代码回答:

      这行得通:

      Integer[] arrayOfInt = { Integer.valueOf(0), Integer.valueOf(1) };
      List<Integer> listOfInt = Arrays.asList(arrayOfInt);
      

      这也有效,因为原始“1”被自动装箱为一个整数对象:

      Integer[] arrayOfInt = { 1, 2, 3, 4 };
      List<Integer> listOfInt = Arrays.asList(arrayOfInt);
      

      最后,这是行不通的,因为 int[] 无法自动装箱为 Integer[]:

      int[] arrayOfInt = { 1, 2, 3, 4 };
      List<Integer> listOfInt = Arrays.asList(arrayOfInt);
      

      更新:这来自与 @MichaelBorek 讨论中的 cmets。 This example 反复尝试相同的代码,无论是否自动装箱。自动装箱的成本似乎是使用它的代码比直接使用 Objects 的代码花费 5 倍

      【讨论】:

      • 但请注意,使用自动装箱/拆箱是一个坏习惯。
      • @MichalBorek 我部分同意;)查看此答案中的第一个和第二个示例。您希望在您的代码中找到什么?可读性很重要,有时比某些性能调整更重要(编译器迟早会处理)。也就是说,请注意像这样的 NPE:int n = (new HashMap&lt;String,Integer).get("Whatever") 与这个“好”代码:Integer n = (new HashMap&lt;String,Integer).get("Whatever")
      • 如果谈到这个确切的例子,你是对的。但我只说这是一个坏习惯 :) 它(自动拆箱/自动装箱)通常被过度使用。尽管如此,我认为您的示例非常适合学习:)。考虑: int x = otherArrayList.get(1);新的 ArrayList().add(x)。由于“坏习惯”,我们有两个(取消)装箱操作:)
      • @MichalBorek 在阅读了你的最后一个回复后,我基本上同意你的看法,但仍然认为你高估了自动装箱的成本,所以我想我会写一个快速而肮脏的测试(见@987654322 @)。事实证明你是非常正确的。虽然可以说,这段代码是为了突出问题,但令人印象深刻的是,无论有没有自动装箱,您的示例的执行时间始终5倍(至少在我的机器上)
      • Miquel 我不确定我是否正确理解您,但在您粘贴的代码中,我看不出性能差异。但是这个:pastebin.com/N6mRhBFM 显示了差异
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-08-28
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多