我如何在Java中转换列表<整数>到int[] ?
我很困惑,因为List.toArray()实际上返回一个对象[],它既不能转换为Integer[]也不能转换为int[]。
现在我正在使用一个循环来这样做:
int[] toIntArray(List<Integer> list) {
int[] ret = new int[list.size()];
for(int i = 0; i < ret.length; i++)
ret[i] = list.get(i);
return ret;
}
有更好的办法吗?
这和上面的问题类似
如何在Java中将int[]转换为Integer[] ?
最简单的方法是使用Apache Commons Lang。它有一个方便的ArrayUtils类,可以做任何您想做的事情。将toPrimitive方法与整数数组的重载一起使用。
List<Integer> myList;
... assign and fill the list
int[] intArray = ArrayUtils.toPrimitive(myList.toArray(new Integer[myList.size()]));
这样你就不用白费力气了。Commons Lang有很多Java遗漏的有用的东西。上面,我选择创建一个大小合适的Integer列表。你也可以使用一个0长度的静态Integer数组,让Java分配一个合适大小的数组:
static final Integer[] NO_INTS = new Integer[0];
....
int[] intArray2 = ArrayUtils.toPrimitive(myList.toArray(NO_INTS));
我建议您使用List<?来自Java集合API的>骨架实现。在这种特殊情况下,它似乎很有帮助:
package mypackage;
import java.util.AbstractList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
// Helper method to convert int arrays into Lists
static List<Integer> intArrayAsList(final int[] a) {
if(a == null)
throw new NullPointerException();
return new AbstractList<Integer>() {
@Override
public Integer get(int i) {
return a[i]; // Autoboxing
}
@Override
public Integer set(int i, Integer val) {
final int old = a[i];
a[i] = val; // Auto-unboxing
return old; // Autoboxing
}
@Override
public int size() {
return a.length;
}
};
}
public static void main(final String[] args) {
int[] a = {1, 2, 3, 4, 5};
Collections.reverse(intArrayAsList(a));
System.out.println(Arrays.toString(a));
}
}
小心装箱/拆箱的缺点。
使用Eclipse Collections,如果您有一个类型为java.util.List<Integer>的列表,您可以执行以下操作:
List<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5);
int[] ints = LazyIterate.adapt(integers).collectInt(i -> i).toArray();
Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, ints);
如果您已经有一个Eclipse集合类型,如MutableList,您可以执行以下操作:
MutableList<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5);
int[] ints = integers.asLazy().collectInt(i -> i).toArray();
Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, ints);
注意:我是Eclipse Collections的提交者