将List转换为int[]。
文章标题:如何将List
在使用Java编程过程中,经常会遇到将List
除了Apache Commons Lang外,还可以使用Google Guava库来实现List
Listlist = ... int[] ints = Ints.toArray(list);
使用Guava库可以避免手动进行中间数组的转换,简化了代码逻辑。然而,需要注意的是,Guava库内部仍然会创建一个中间数组来进行转换,只是这个中间数组被隐藏在库的实现中,开发人员无法直接访问。具体而言,Guava库会通过调用`collection.toArray()`方法来创建一个Object[]类型的中间数组。
总之,通过使用Guava库提供的Ints.toArray(Collection
在Java中,将`List
- `List
- 无法将`int`作为泛型的类型参数,因此必须使用特定于`int`的方法(或使用反射进行一些不好的操作)。
尽管`Arrays`类是在泛型出现之前发布的,但如果现在引入泛型,它仍然必须包含所有可怕的重载(假设您想使用基本类型数组)。
然而,有一些库为所有基本类型提供了自动生成的这种方法的版本(即为每种类型复制一个模板)。这样做虽然不美观,但这就是现实。
ColinD的答案中提到了Guava库的`Ints.toArray(Collection
除非使用其他库(这些库基本上仍然使用循环,但是在它们的代码中而不是你的代码中),否则我认为没有更好的方法。这是一个比我不知道是否有更好方法更强烈的断言。
同时,在Oracle Java工程师们纠结于用模块过度复杂化语言的同时,你无法避免使用基本类型,直到Java语言设计师改进它。
将`List
问题出现的原因是Java中的流(Stream)在处理基本类型int时,返回的是Object数组或者泛型数组,而不是我们想要的int数组。在Java 8中引入了IntStream这个专门用于处理int类型的流,因此解决方法就是将Stream
具体解决方法如下:
1. 使用mapToInt()方法将Stream
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()方法。如果需要处理这些类型的数组,需要使用其他方法或库。