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

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

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

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

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

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

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
?
阿波罗的战车

TA贡献1862条经验 获得超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
  • 3 回答
  • 0 关注
  • 385 浏览

添加回答

举报

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