首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中将List<Integer>转换为int[]?

如何在Java中将List<Integer>转换为int[]?
EN

Stack Overflow用户
提问于 2009-06-07 04:20:18
回答 16查看 621K关注 0票数 677

这类似于这个问题:How to convert int[] to Integer[] in Java?

我是Java新手。如何在Java中将List<Integer>转换为int[]?我很困惑,因为List.toArray()实际上返回了一个Object[],它可以转换为Integer[]int[]

现在我正在使用一个循环来做到这一点:

代码语言:javascript
运行
复制
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;
}

我相信有更好的方法可以做到这一点。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-06-06 20:28:19

不幸的是,由于Java处理原始类型、装箱、数组和泛型的本质,我不认为有更好的方法来实现这一点。特别是:

  • List<T>.toArray不能工作,因为没有从int
  • You到Integer的转换不能使用int作为泛型的类型参数,所以它必须是int-specific方法(或者使用反射来做讨厌的把戏的方法)。

我相信有一些库为所有的原始类型自动生成了这种方法的版本(也就是说,每个类型都有一个复制的模板)。很难看,但恐怕就是这么回事:

即使Arrays类在泛型出现之前就出现了,但如果今天引入它,它仍然必须包括所有可怕的重载(假设您想要使用原始数组)。

票数 252
EN

Stack Overflow用户

发布于 2014-05-30 08:05:17

还没有人提到Java 8中添加的streams,所以它是这样的:

代码语言:javascript
运行
复制
int[] array = list.stream().mapToInt(i->i).toArray();
// OR
// int[] array = list.stream().mapToInt(Integer::intValue).toArray();

思考过程:

  • 简单的Stream#toArray返回一个Object[]数组,所以它不是我们想要的。而且,因为泛型类型int

不能表示基本类型Stream#toArray(IntFunction<A[]> generator),所以A不能做我们想要的事情

  • 所以有一些流可以处理原始类型int而不是包装器Integer会很好,因为它的toArray方法很可能也会返回一个int[]数组(在这里返回其他东西,如Object[]或甚至装箱的Integer[]将是不自然的)。幸运的是,Java8有这样一个流,就是IntStream

  • ,所以现在我们唯一需要弄清楚的就是如何将我们的Stream<Integer> (将从list.stream()返回)转换成那个闪亮的IntStream。这里,Stream#mapToInt(ToIntFunction mapper)方法应运而生。我们所需要做的就是向它传递一个从Integerint的映射。

我们可以使用类似Integer#intValue的代码,它返回一个int,如下所示:

mapToInt( (Integer i) -> i.intValue() )(或者一些人可能更喜欢:mapToInt(Integer::intValue)。)

但是可以使用拆箱生成类似的代码,因为编译器知道这个lambda的结果必须是int类型的( mapToInt中使用的lambda是ToIntFunction接口的一个实现,该接口期望一个类型为:int applyAsInt(T value)的方法作为主体,该方法期望返回一个int)。

所以我们可以简单地写:

mapToInt((整数i)->i)

此外,由于(Integer i)中的Integer类型可以由编译器推断,因为List<Integer>#stream()返回一个Stream<Integer>,所以我们也可以跳过它,这样我们就可以

mapToInt(i -> i)

票数 902
EN

Stack Overflow用户

发布于 2010-07-05 05:32:35

除了Commons Lang之外,您还可以使用Guava的方法Ints.toArray(Collection collection)来实现这一点

代码语言:javascript
运行
复制
List<Integer> list = ...
int[] ints = Ints.toArray(list);

这使您不必执行Commons Lang等效项要求您自己进行的中间数组转换。

票数 216
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/960431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档