2011-05-30 60 views
20

是否有任何實用方法將數值類型列表轉換爲原始類型數組? 換句話說,我正在尋找比這更好的解決方案。在java中將List <Long>對象轉換爲long []數組的最佳方式是什麼?

private long[] toArray(List<Long> values) { 
    long[] result = new long[values.size()]; 
    int i = 0; 
    for (Long l : values) 
     result[i++] = l; 
    return result; 
} 
+0

見http://stackoverflow.com/questions/3770289/converting-array-of-primitives-to-array-of-containers-in- java – 2011-05-30 10:19:19

+0

,因爲你想要的仍然是你的解決方案不要忘記'l.longValue();' – 2011-05-30 10:21:53

+1

@Vash:'longValue()'因爲存在自動裝箱而不是必需的 – Jonathan 2011-05-30 10:43:55

回答

22

由於Java 8,你可以做到以下幾點:

long[] result = values.stream().mapToLong(l -> l).toArray(); 

這裏發生了什麼?

  1. 我們將List<Long>轉換爲Stream<Long>
  2. 我們呼籲mapToLong就可以得到一個LongStream
    • mapToLong的參數是一個ToLongFunction,其中有一個long的結果類型。
    • 由於Java自動將Long解包爲long,所以編寫l -> l作爲lambda表達式的工作原理。那裏的Long被轉換爲long。我們也可以更明確地使用Long::longValue來代替。
  3. 我們稱之爲toArray,它返回一個long[]
+0

你能解釋一下這裏發生了什麼嗎? – VaidAbhishek 2016-07-20 10:55:40

+0

@VaidAbhishek完成:)。 – robinst 2016-07-21 11:36:07

+0

我試着用你的例子返回Long [],但仍然在我調用toArray時返回long []。你可以給一個完整的方法調用返回Long [] – 2017-04-06 18:23:37

7

使用ArrayUtils.toPrimitive(Long[] array)Apache Commons

Long[] l = values.toArray(new Long[values.size()]); 
long[] l = ArrayUtils.toPrimitive(l); 
+1

你可能需要指定你想要一個'long'數組返回:'values.toArray(new long [0]);' – 2011-05-30 10:26:14

+3

@Gary Buyn:你不能使用原始類型作爲泛型參數。 – 2011-05-30 10:27:33

+1

我不知道你爲什麼得到4票,但這個代碼甚至不會編譯,你不能從Object []轉換爲long []。 – 2011-05-30 10:28:44

1

我不記得一些本地方法,將做到這一點,但創建自己的一個錯誤;-)。

public class YasinUtilities { 

    public static long[] toArray(Iterator<Long) values) { //Better choice would be Enumerator but easier is this way. 

     if(value == null) { 
     //return null or throw exception 
     } 

     long[] result = new long[values.size()]; 

     Long current = null; 
     int i = 0; 
     while(values.hasNext()) { 

     current = values.next(); 

     if(current == null) { 
     result[i++] = 0L; //or -1; 
     } else { 
     result[i++] = current.longValue(); 
     } 
     } 
    } 
} 
+1

爲什麼是-1? ... – 2011-06-01 08:09:54

相關問題