在Java中将列表转换为数组

时间:2018-05-05 15:58:15

标签: java

我是Long类型的List,并希望将其转换为long类型的数组。

然而,当向列表添加元素时,它表示无法找到方法" add(int)"

我的代码如下所示

package collections;

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class ListToArray {

    private static List<Long> list;

    public static void main(String[] args){

        list=new ArrayList<Long>();
        list.add(121145788);
        list.add(1245898);

        long[] arr=new long[list.size()];

        arr=list.toArray();

    }
}

我得到的错误是

错误(16,13):无法找到方法add(int)。 错误(21,25):不兼容的类型

有人可以指出它出错的地方。

4 个答案:

答案 0 :(得分:4)

根据评论中的建议,您应添加L以强制该值为long

list.add(121145788L);
list.add(1245898L);

说明:

您要添加的值为int,而list用于long。添加L会使编译器明确地将数字文字用作 L ong类型的值,并且可以将其添加到列表中。

如果没有它,这些数字将被视为Integers,并且这些数字无法添加到Long类型的列表中,因此

cannot find method add(int)

有一种方法add(long),这就是使用L时使用的方法。

要转换为数组,您需要采用传统方式:

for (int i = 0; i < arr.length; i++) {
    arr[i]=list.get(i);
}

这是因为longprimitive,而Long是引用类型(即它是Object)。从基元到对象的转换并不总是那么容易。在这种情况下,老式的方式运作良好。

答案 1 :(得分:2)

首先,这是您的代码,但包含所有修复程序!

    private static List<Long> list;

    public static void main(String[] args){

        list=new ArrayList<Long>();
        list.add(121145788L);
        list.add(1245898L);

        Long[] arr = new Long[list.size()];

        list.toArray(arr);

    }

以下是一些解释:

  • 您有Long类型的列表。当你将add()个项目放到列表中时 - 编译器希望它们的类型为Long,但是你要添加文字值(普通数字,如121145788),因此将它们视为整数(类型int并且自动装箱到Integer而不是Long。因此,添加L将文字视为long,然后将其自动装箱到Long。很好的编译器:)
  • list.toArray(arr);这是将列表转换为数组的正确方法。因为您使用的方法返回的Objectarr数组不是Object的数组。
  • 我再次使用这个正确的方法将T []作为输入,因此您需要稍微更改arr声明以使其为Long类型而不是基本类型数组{{ 1}}。

如果出于某种原因需要long,最简单的方法是:

long[]

答案 2 :(得分:1)

错误(16,13):找不到方法add(int),这是因为你在Long列表中传递int而不是Long值。你应该这样做:

list.add(121145788l);

对于第二个错误,请关注this。希望,这有帮助!

答案 3 :(得分:0)

JVM没有自动将int(short,byte,char)强制转换为Long。它在下一个链接上进行了解释。

Java: Why can't I cast int to Long

可以将List<Long>转换为long[],也可以在SO上解答。

How to convert List<Integer> to int[] in Java?

答案是:

使用Java 8流

    long[] arr = list.stream().mapToLong(Long::longValue).toArray();

使用Guava

    long[] arr = Longs.toArray(list);

使用Apache Commons Lang

    long[] arr = ArrayUtils.toPrimitive(list.toArray(new Long[0]))