将List转换为int[]。

19 浏览
0 Comments

将List转换为int[]。

在Java中,如何将List转换为int[]?\n我感到困惑,因为List.toArray()实际上返回一个Object[],既无法转换为Integer[],也无法转换为int[]。\n目前,我使用循环来实现:\n

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

\n有没有更好的方法来实现这个?

0
0 Comments

文章标题:如何将List转换为int[]

在使用Java编程过程中,经常会遇到将List转换为int[]的需求。然而,Java语言本身并没有提供直接将List转换为int[]的方法,因此需要借助第三方库来实现这一功能。其中,Apache Commons Lang是一个常用的Java工具库,提供了将List转换为int[]的方法。然而,在使用Apache Commons Lang的方法时,需要进行中间数组的转换,这增加了代码的复杂性。

除了Apache Commons Lang外,还可以使用Google Guava库来实现List转换为int[]的需求。Google Guava是Google开发的一个开源Java工具库,提供了丰富的工具类和方法。在Guava库中,有一个方法Ints.toArray(Collection collection),可以直接将List转换为int[]。使用Guava库进行转换的代码如下:

List list = ...
int[] ints = Ints.toArray(list);

使用Guava库可以避免手动进行中间数组的转换,简化了代码逻辑。然而,需要注意的是,Guava库内部仍然会创建一个中间数组来进行转换,只是这个中间数组被隐藏在库的实现中,开发人员无法直接访问。具体而言,Guava库会通过调用`collection.toArray()`方法来创建一个Object[]类型的中间数组。

总之,通过使用Guava库提供的Ints.toArray(Collection collection)方法,可以方便地将List转换为int[]。这种方法避免了手动进行中间数组的转换,简化了代码。然而,需要注意Guava库内部仍然会创建一个中间数组来进行转换。

0
0 Comments

在Java中,将`List`转换为`int[]`的问题是由于Java处理基本类型、装箱、数组和泛型的特性而产生的。具体原因如下:

- `List.toArray`方法无法直接将`Integer`转换为`int`。

- 无法将`int`作为泛型的类型参数,因此必须使用特定于`int`的方法(或使用反射进行一些不好的操作)。

尽管`Arrays`类是在泛型出现之前发布的,但如果现在引入泛型,它仍然必须包含所有可怕的重载(假设您想使用基本类型数组)。

然而,有一些库为所有基本类型提供了自动生成的这种方法的版本(即为每种类型复制一个模板)。这样做虽然不美观,但这就是现实。

ColinD的答案中提到了Guava库的`Ints.toArray(Collection)`方法。

除非使用其他库(这些库基本上仍然使用循环,但是在它们的代码中而不是你的代码中),否则我认为没有更好的方法。这是一个比我不知道是否有更好方法更强烈的断言。

同时,在Oracle Java工程师们纠结于用模块过度复杂化语言的同时,你无法避免使用基本类型,直到Java语言设计师改进它。

将`List`转换为`int[]`的问题主要是由于Java处理基本类型、装箱、数组和泛型的特性所限制。目前,除非使用其他库,否则没有更好的解决方法。

0
0 Comments

问题出现的原因是Java中的流(Stream)在处理基本类型int时,返回的是Object数组或者泛型数组,而不是我们想要的int数组。在Java 8中引入了IntStream这个专门用于处理int类型的流,因此解决方法就是将Stream转换为IntStream。

具体解决方法如下:

1. 使用mapToInt()方法将Stream转换为IntStream。这个方法需要传入一个ToIntFunction类型的参数,其中T是Integer类型,表示从Integer到int的映射。可以使用lambda表达式或者方法引用来提供这个映射关系。例如:

list.stream().mapToInt(i -> i.intValue()).toArray();

list.stream().mapToInt(Integer::intValue).toArray();

2. 由于lambda表达式的返回值类型已经确定是int,可以简化为:

list.stream().mapToInt(i -> i).toArray();

这是解决问题的最佳方法,但是缺乏解释。在这个问题的回答中,提供了对解决方法的解释和说明,并且引入了Java 8中的IntStream,这是一个很好的解决方案。该解决方案不需要额外的库,只需要使用Java 8即可。

然而,需要注意的是,这种方法不适用于byte、short、char和float数组,因为Java中没有相应的Stream类型和对应的mapToByte()、mapToShort()、mapToChar()、mapToFloat()方法。如果需要处理这些类型的数组,需要使用其他方法或库。

0