2011-05-19 61 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