如何将List<Integer>转换为int[]数组 | Java Debug 笔记

667 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

目录

  • 问题
  • 解决

问题

问题:如何将List转换为int[]数组?

Stackoverflow地址stackoverflow.com/questions/9…

一般常规做法:

int[] toIntArray(List<Integer> list){
    int[] ret = new int[list.size()];
    for(int i = 0;i < ret.length;i++)
      ret[i] = list.get(i);
    return ret;
}

解决

有人认为,上述常规的做法就是最好的方法,并且得到了很多的赞同。

但是,后来有人指出,如果你使用 java 8 的话,那么还有更加方便的做法。

具体编码如下:

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

或者使用

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

这么做的原因有三个。

一、如果使用直接链表List的toArray()方法,返回的是一个Object[]对象数组,这并不是我们想要的。

二、Integer数组和int数组并不是完全一样的,需要转换成真正的int数组。

三、我们可以使用Integer#intValue的方法返回int类型,比如:

mapToInt( (Integer i) -> i.intValue() )  

其实,还有更加简单的方法,我们可以写成如下形式:

mapToInt((Integer i)->i)

此外,由于编译器可以推断 i 是一种Integer类型,因为 List#stream()返回stream,所以我们也可以直接跳过这一步,我们得到更加简便的方法:

 mapToInt(i -> i)