Long[] を long[] に変換するにはどうすればよいですか? たとえば、以下のように配列でない場合に変換する方法を知っています。
long ll = (Long)Object[1].longValue()
しかし、配列に変換するにはどうすればよいですか。以下は正しくありませんが、誰でも修正できますか?
long[] l_ar = (Long[])Object[]
Long[] を long[] に変換するにはどうすればよいですか? たとえば、以下のように配列でない場合に変換する方法を知っています。
long ll = (Long)Object[1].longValue()
しかし、配列に変換するにはどうすればよいですか。以下は正しくありませんが、誰でも修正できますか?
long[] l_ar = (Long[])Object[]
に基づいてソリューションを盗むことができますArrayUtils
Long[] longObjects = { 1L, 2L, 3L };
long[] longArray = ArrayUtils.toPrimitive(longObjects);
それを行うための標準 API メソッドはありませんnull
( -elements はどのように処理されますか?) ため、そのようなメソッドを自分で作成する必要があります。
このようなもの(ビーイングしているオブジェクトにスローされます)NullPointerException
null
:
public static long[] toPrimitives(Long... objects) {
long[] primitives = new long[objects.length];
for (int i = 0; i < objects.length; i++)
primitives[i] = objects[i];
return primitives;
}
Java 8 ストリームの使用:
public static long[] unboxed(final Long[] array) {
return Arrays.stream(array)
.filter(Objects::nonNull)
.mapToLong(Long::longValue)
.toArray();
}
これを行うには、各配列をナビゲートするのが最善の方法です。
たとえば、Long[] から long[] に移動します。
Long[] objLong = new Long[10];
//fill objLong with some values
long[] primLong = new long[objLong.length]
for(int index = 0; index < objLong.length; index++)
{
primLong[index] = objLong[index];
}
自動アンボックス化により、これは Long を long に変換することで解決するはずです。