25

Long[] を long[] に変換するにはどうすればよいですか? たとえば、以下のように配列でない場合に変換する方法を知っています。

long ll = (Long)Object[1].longValue()

しかし、配列に変換するにはどうすればよいですか。以下は正しくありませんが、誰でも修正できますか?

long[] l_ar = (Long[])Object[]  
4

4 に答える 4

43

に基づいてソリューションを盗むことができますArrayUtils

Long[] longObjects = { 1L, 2L, 3L };
long[] longArray = ArrayUtils.toPrimitive(longObjects);
于 2012-08-19T20:05:05.647 に答える
21

それを行うための標準 API メソッドはありませんnull( -elements はどのように処理されますか?) ため、そのようなメソッドを自分で作成する必要があります。

このようなもの(ビーイングしているオブジェクトにスローされます)NullPointerExceptionnull

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;
}
于 2012-08-19T20:00:25.003 に答える
11

Java 8 ストリームの使用:

public static long[] unboxed(final Long[] array) {
    return Arrays.stream(array)
                 .filter(Objects::nonNull)
                 .mapToLong(Long::longValue)
                 .toArray();
}
于 2016-03-07T13:39:49.750 に答える
2

これを行うには、各配列をナビゲートするのが最善の方法です。

たとえば、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 に変換することで解決するはずです。

于 2012-08-19T20:05:35.787 に答える