为了账号安全,请及时绑定邮箱和手机立即绑定

如何将包含整数的ArrayList转换为原始int数组?

如何将包含整数的ArrayList转换为原始int数组?

MM们 2019-10-16 13:09:13
如何将包含整数的ArrayList转换为原始int数组?我试图用下面的代码将包含Integer对象的ArrayList转换为原始int[],但是它会引发编译时错误。可以用Java进行转换吗?List<Integer> x =  new ArrayList<Integer>(); int[] n = (int[])x.toArray(int[x.size()]);
查看完整描述

3 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

你可以转换,但我不认为有什么可以自动完成的:

public static int[] convertIntegers(List<Integer> integers){
    int[] ret = new int[integers.size()];
    for (int i=0; i < ret.length; i++)
    {
        ret[i] = integers.get(i).intValue();
    }
    return ret;}

(请注意,这将引发NullPointerException,如果integers或者它中的任何元素都是null.)

编辑:根据注释,您可能希望使用列表迭代器来避免使用列表(如LinkedList:

public static int[] convertIntegers(List<Integer> integers){
    int[] ret = new int[integers.size()];
    Iterator<Integer> iterator = integers.iterator();
    for (int i = 0; i < ret.length; i++)
    {
        ret[i] = iterator.next().intValue();
    }
    return ret;}



查看完整回答
反对 回复 2019-10-17
?
HUX布斯

TA贡献1876条经验 获得超6个赞

如果你用爪哇-8还有另外一种方法。

int[] arr = list.stream().mapToInt(i -> i).toArray();

它所做的是:

  • 得到一个

    Stream<Integer>

    从名单上
  • 获得

    IntStream

    通过将每个元素映射到自身(标识函数),将

    int

    每个人持有的价值

    Integer

    对象(自Java 5以来自动完成)
  • 的数组

    int

    打电话

    toArray

您也可以显式地调用intValue通过方法参考,即:

int[] arr = list.stream().mapToInt(Integer::intValue).toArray();

还值得一提的是,你可以得到一个NullPointerException如果你有null列表中的参考。通过向流管道添加过滤条件可以很容易地避免这种情况,如下所示:

 //.filter(Objects::nonNull) also worksint[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();

例子:

List<Integer> list = Arrays.asList(1, 2, 3, 4);int[] arr = list.stream().mapToInt(i -> i).toArray(); //[1, 2, 3, 4]list.set(1, null); 
//[1, null, 3, 4]arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray(); //[1, 3, 4]




查看完整回答
反对 回复 2019-10-17
?
侃侃无极

TA贡献2051条经验 获得超10个赞

ApacheCommons有一个ArrayUtils类,它有一个用于Primitive()的方法,它就是这样做的。

import org.apache.commons.lang.ArrayUtils;...
    List<Integer> list = new ArrayList<Integer>();
    list.add(new Integer(1));
    list.add(new Integer(2));
    int[] intArray = ArrayUtils.toPrimitive(list.toArray(new Integer[0]));

但是,正如Jon所展示的,独立完成这个任务非常容易,而不是使用外部库。



查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 475 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信