2011-05-19 54 views
6

中的拳击原始数组,有没有一种直接的(理想的一次调用)方式来将int的数组转换为ArrayList<Integer>并返回?在ArrayList上调用toArray()将返回一个Integer的数组 - 不完全是我想要的。(联合国)在Java Java世界中的Java

我可以很容易地用一个循环来做到这一点(事实上已经做到了)。我想知道图书馆/语言是否支持相同的。

编辑:谢谢所有,我已经写了我自己的拳击手和开箱。我很惊讶语言/ RTL设计者没有想到它自己,特别是对于设计不合格的原始类型。

+1

核心Java没有。我确定有人可以提供一个链接到第三方库,可以为你做。 – jjnguy 2011-05-19 20:32:18

+0

可能重复[如何在Java中将int \ [\]转换为列表?](http://stackoverflow.com/questions/1073919/how-to-convert-int-into-listinteger-in-java) – finnw 2011-05-19 21:03:02

回答

1

Common.Lang从阿帕奇有一个实用工具类,做它:如果您创建,这将是一个呼叫转换的实用方法ArrayUtils

+0

'ArrayUtils'不会在原始数组和集合之间进行转换。 – ColinD 2011-05-19 21:01:37

+1

@ColinD:你对Array()需要申请之前。 – h3xStream 2011-05-19 21:42:17

3

。也许在你的情况下,会比添加一个完整的库(其中你可能只使用一个函数)更好,尽管这对你的应用程序来说应该是太大的负担。

这里的source code的h3xStream回答(很高兴它使用Apache许可证);)

9

使用GuavaInts.asList(int...)Ints.toArray(Collection<Integer>)):

int[] intArray = ... 
List<Integer> intArrayAsList = Ints.asList(intArray); 
int[] intArray2 = Ints.toArray(intArrayAsList); 

注意,相似的Arrays.asListInts.asList返回一个列表是给定阵列的视图。您无法添加或删除它,但可以在特定索引处输入set。你也可以把它复制到如果你想要一个新的ArrayList

List<Integer> arrayList = Lists.newArrayList(Ints.asList(intArray)); 

番石榴对所有原始类型相同的方法。

+1

为了我在睡梦中可以写出的三行功能,我没有在项目中引入新的依赖项。 – 2015-12-01 14:21:57

1

我设法找到解决方案的Java 8

import java.util.Arrays; 
... 
double[] columnsValue = {...}; 
Double[] values = Arrays.stream(columnsValue).boxed().toArray(Double[]::new); 

我无法解释什么Double[]::new意思就是这样,因为我不知道的的Java 8之前此功能(其实,IntelliJ IDEA为我写了这个),但它看起来好像是在做数组的每个元素的new Double(double)

请注意:我只在台式机上测试过,我不知道它是否适用于Android。

+0

你在那里做的实际上只有* boxing *(将一个原语转换为它相应的包装类),而不是*拆箱*(从一个包装类转换到它相应的原语)。 – Allison 2018-01-17 09:08:49

0

装箱和拆箱(无需专用库):

// Necessary Imports: 
import java.util.*; 
import java.util.stream.*; 

// Integers: 
int[] primitives = {1, 2, 3}; 
Integer[] boxed = Arrays.stream(primitives).boxed().toArray(Integer[]::new); 
int[] unboxed = Arrays.stream(boxed).mapToInt(Integer::intValue).toArray(); 

// Doubles: 
double[] primitives = {1.0, 2.0, 3.0}; 
Double[] boxed = Arrays.stream(primitives).boxed().toArray(Double[]::new); 
double[] unboxed = Arrays.stream(boxed).mapToDouble(Double::doubleValue).toArray(); 

注意,这需要的Java 8Stream Documentation)。

对于不知道::含义的人来说,它用于制作Method Reference

+1

需要Java 8吗? – 2018-01-17 13:45:05

+0

@SevaAlekseyev当然是的 – 2018-01-31 17:12:18

+0

@SevaAlekseyev是的,对不起,我会更新它来提到这一点。 – Allison 2018-02-04 04:10:41