本文正在参加「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)