将long数组转换为ArrayList <Long>

rip*_*234 24 java collections list

遗憾的是这不起作用:

long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);
Run Code Online (Sandbox Code Playgroud)

除了手动添加它们之外还有更好的方法吗?

Boz*_*zho 43

使用apache commons-lang中的ArrayUtils

long[] longs = new long[]{1L};
Long[] longObjects = ArrayUtils.toObject(longs);
List<Long> longList = java.util.Arrays.asList(longObjects);
Run Code Online (Sandbox Code Playgroud)

  • :)我在我的日食中打开它(使用反编译器) (2认同)

Esk*_*sko 12

由于其他人建议使用外部库,这里是Google Guava库的方式:

long[] longs = {1L, 2L, 3L};
List<Long> longList = com.google.common.primitives.Longs.asList(longs);
Run Code Online (Sandbox Code Playgroud)

Longs的相关javadoc.


Bil*_*ain 9

您可以通过实施AbstractList静态工厂来避免复制.列表的所有更改都会写入数组,反之亦然.

在某处创建此方法.

public static List<Long> asList(final long[] l) {
    return new AbstractList<Long>() {
        public Long get(int i) {return l[i];}
        // throws NPE if val == null
        public Long set(int i, Long val) {
            Long oldVal = l[i];
            l[i] = val;
            return oldVal;
        }
        public int size() { return l.length;}
    };
}
Run Code Online (Sandbox Code Playgroud)

然后只需调用此方法即可创建数组.您将需要使用接口List而不是ArrayList声明中的实现.

long[] longs = new long[]{1L, 2L, 3L};
List<Long> longArray = asList(longs);
Run Code Online (Sandbox Code Playgroud)

我从语言指南中学到了这种技巧.


Pau*_*zie 5

注意使用java.lang.Long,而不是long

final Long[] longs = new Long[]{1L};
final List<Long> longArray = Arrays.asList(longs);
Run Code Online (Sandbox Code Playgroud)

不添加任何第三方依赖项.