有誰知道一個高效,快捷,乾淨的方式Long[]
轉換爲long[]
,反之亦然Java中的明顯的環帶(UN)箱&副本外面?長[]要長[],反之亦然?
注意:這是不是關於拆箱Long
或拳擊long
。我明確地談論數組!
「沒有比迴路更好的辦法,並複製」也將是一個答案;)
編輯: 我知道做上述的含義,它是更好地避免它。假設,我無法避免它,並希望儘可能聰明地做到這一點,而不使用第三方的東西。
有誰知道一個高效,快捷,乾淨的方式Long[]
轉換爲long[]
,反之亦然Java中的明顯的環帶(UN)箱&副本外面?長[]要長[],反之亦然?
注意:這是不是關於拆箱Long
或拳擊long
。我明確地談論數組!
「沒有比迴路更好的辦法,並複製」也將是一個答案;)
編輯: 我知道做上述的含義,它是更好地避免它。假設,我無法避免它,並希望儘可能聰明地做到這一點,而不使用第三方的東西。
沒有比循環更好的方式和複製
最好的解決方案是避免首先轉換。如果您擔心效率,請避免使用Long[]
,因爲它比long[]
大很多倍如果您需要使用集合,則可以嘗試包裝long []的TLongArrayList。
+1 - 尋求最佳解決方案。 –
@StephenC乾杯。 :) –
首先提出問題的先決條件是,由於我的管轄範圍之外的原因,我無法避免轉換。我只是想,如果我無法避免它,我至少希望儘可能聰明地做到這一點。 – Fildor
當的Java盒/ unboxes,它實際上做一些事情,即使它沒有展示給用戶。
Long[]
和long[]
是非常不同的對象。所以答案是,不,你必須循環和複製。但更好的問題是,你爲什麼需要這個?幾乎在任何情況下都可以互換使用它們......您必須在實施中決定對您來說什麼更重要,對象創建或內存使用情況。希望你用Long.valueOf
創建您Long
S(或自動裝箱)使用Java的緩存Long
值。
這是apache common lang的ArrayUtils.toPrimitive
的來源。它使用一個循環。
public static long[] toPrimitive(Long[] array) {
if (array == null) {
return null;
} else if (array.length == 0) {
return EMPTY_LONG_ARRAY;
}
final long[] result = new long[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i].longValue();
}
return result;
}
Java本身並沒有提供任何方式來將對象數組轉換爲元組數組。
ArrayUtil Reference希望這有助於。
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
沒有比環路及複印件,包裹在一個輔助功能,更好的方法,你可以用一遍又一遍。
如果使用apache commons lang你可以這樣做:
long[] primitive = ArrayUtils.toPrimitive(new Long[]{1L, 2L, 3L, 4L});
您可以用阿帕奇ArrayUtils做詳見這裏:
我會去循環和複製真的。 – OmniOwl
「沒有比循環和複製更好的方法了:)」 - Java對於它的數組類型非常嚴格。 'Cast-style'轉換不起作用,自動拆箱不適用於數組(但?)。 – JimmyB
爲什麼你需要那個? – dantuch