有没有人知道一种有效,快速和干净的方式将Long[]
转换为long[]
,反之亦然在Java之外的明显for循环中使用(un)box& copy?
注意:对于取消装箱Long
或装箱long
,不。我明确地谈论阵列!
“没有比循环和复制更好的方法”也是一个答案;)
编辑: 我知道执行上述操作的含义,并且避免更好。假设,我无法避免它,并希望在不使用第三方的情况下尽可能巧妙地做到这一点。
答案 0 :(得分:9)
如果您使用apache commons lang,则可以执行以下操作:
long[] primitive = ArrayUtils.toPrimitive(new Long[]{1L, 2L, 3L, 4L});
答案 1 :(得分:6)
没有比循环和复制更好的方法
最好的解决方案是首先避免转换。如果您担心效率,请避免使用Long[]
,因为它比long[]
大很多倍。如果您需要使用集合,可以尝试使用包含long []的TLongArrayList。
答案 2 :(得分:4)
当Java box / unboxes时,它实际上有些东西,即使它没有显示给用户。
Long[]
和long[]
是非常不同的对象。所以答案是,不,你必须循环和复制。但更好的问题是,你为什么需要这个呢?您几乎可以在任何情况下互换使用它们......您必须在实现时决定对您来说更重要的是,对象创建或内存使用情况。希望您使用Long.valueOf
创建Long
(或自动装箱)以使用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;
}
答案 3 :(得分:1)
Java本身并没有提供任何方法将对象数组转换为premitive数组。
答案 4 :(得分:1)
ArrayUtil Reference希望这可能会有所帮助。
long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
答案 5 :(得分:1)
没有比循环和复制更好的方法,包装在一个可以反复使用的辅助函数中。
答案 6 :(得分:0)
您可以使用apache中的ArrayUtils来完成此操作: