将long数组转换为ArrayList <long> </long>

时间:2009-12-30 11:44:50

标签: java list collections

这可悲的是行不通:

long[] longs = new long[]{1L};
ArrayList<Long> longArray = new ArrayList<Long>(longs);

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

7 个答案:

答案 0 :(得分:42)

使用apache commons-lang中的ArrayUtils

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

答案 1 :(得分:11)

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

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

Relevant javadoc for Longs

答案 2 :(得分: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;}
    };
}

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

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

我从language guide获取了这项技术。

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:2)

Bozho的答案很好,但我不喜欢两次复制数组。我最终为此推出了自己的实用工具方法:

public static ArrayList<Long> convertArray(long[] array) {
  ArrayList<Long> result = new ArrayList<Long>(array.length);
  for (long item : array)
    result.add(item);
  return result;
}

答案 5 :(得分:1)

在JDK 1.8中,使用Lambda和Stream API,我们可以这样做:

long[] longArr = {3L, 4L, 5L, 6L, 7L};
List<Long> longBoxArr = Arrays.stream(longArr).boxed().collect(Collectors.toList());

答案 6 :(得分:0)

使用Dollar,您只需一行代码即可完成此转换:

long[] longs = new long[]{1L};
List<Long> longList = $(longs).toList();

你也可以轻松打包它们:

Long[] arrayOfLongs = $(longs).toArray();