长[]到长[],反之亦然?

时间:2012-12-13 12:30:54

标签: java

有没有人知道一种有效,快速和干净的方式将Long[]转换为long[],反之亦然在Java之外的明显for循环中使用(un)box& copy?

注意:对于取消装箱Long或装箱long。我明确地谈论阵列!

“没有比循环和复制更好的方法”也是一个答案;)

编辑: 我知道执行上述操作的含义,并且避免更好。假设,我无法避免它,并希望在不使用第三方的情况下尽可能巧妙地做到这一点。

7 个答案:

答案 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来完成此操作:

Convert an array of primitive longs into a List of Longs