如何将int 转换为Java中的List <Integer>?

如何将int[]转换为Java中的List<Integer>

当然,我对其他答案感兴趣,而不是一个一个循环地逐个进行。 但是,如果没有其他答案,我会select最好的一个来显示这个function不是Java的一部分。

int[]转换为List<Integer>没有捷径,因为Arrays.asList不处理装箱,只会创build一个不是你想要的List<int[]> 。 你必须做一个实用的方法。

 int[] ints = {1, 2, 3}; List<Integer> intList = new ArrayList<Integer>(); for (int index = 0; index < ints.length; index++) { intList.add(ints[index]); } 

同样来自番石榴图书馆 … com.google.common.primitives.Ints:

 List<Integer> Ints.asList(int...) 

在Java 8中,你可以做到这一点

 int[] ints = {1,2,3}; List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList()); 

Arrays.asList不会像其他一些答案所期望的那样工作。

这段代码不会创build10个整数的列表。 它将打印1 ,而不是10

 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; List lst = Arrays.asList(arr); System.out.println(lst.size()); 

这将创build一个整数列表:

 List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 

如果你已经有了整数,那么没有快速的转换方法,你最好用循环。

另一方面,如果你的数组具有对象,而不是原语,Arrays.asList将工作:

 String str[] = { "Homer", "Marge", "Bart", "Lisa", "Maggie" }; List<String> lst = Arrays.asList(str); 

我会用不同的方法添加另一个答案。 没有循环,但会使用自动装箱function的匿名类:

 public List<Integer> asList(final int[] is) { return new AbstractList<Integer>() { public Integer get(int i) { return is[i]; } public int size() { return is.length; } }; } 

最小的一段代码是:

 public List<Integer> myWork(int[] array) { return Arrays.asList(ArrayUtils.toObject(array)); } 

其中ArrayUtils来自commons-lang 🙂

在具有stream的Java 8中:

 int[] ints = {1, 2, 3}; List<Integer> list = new ArrayList<Integer>(); Collections.addAll(list, Arrays.stream(ints).boxed().toArray(Integer[]::new)); 

或与collections家

 List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList()); 

这也是值得检查这个错误报告 ,这是closures的理由“不是缺陷”和以下文本:

“整个数组的自动装箱并不是特定的行为,这对于大型数组来说是非常昂贵的。”

试试这个class级:

 class PrimitiveWrapper<T> extends AbstractList<T> { private final T[] data; private PrimitiveWrapper(T[] data) { this.data = data; // you can clone this array for preventing aliasing } public static <T> List<T> ofIntegers(int... data) { return new PrimitiveWrapper(toBoxedArray(Integer.class, data)); } public static <T> List<T> ofCharacters(char... data) { return new PrimitiveWrapper(toBoxedArray(Character.class, data)); } public static <T> List<T> ofDoubles(double... data) { return new PrimitiveWrapper(toBoxedArray(Double.class, data)); } // ditto for byte, float, boolean, long private static <T> T[] toBoxedArray(Class<T> boxClass, Object components) { final int length = Array.getLength(components); Object res = Array.newInstance(boxClass, length); for (int i = 0; i < length; i++) { Array.set(res, i, Array.get(components, i)); } return (T[]) res; } @Override public T get(int index) { return data[index]; } @Override public int size() { return data.length; } } 

testing用例:

 List<Integer> ints = PrimitiveWrapper.ofIntegers(10, 20); List<Double> doubles = PrimitiveWrapper.ofDoubles(10, 20); // etc 

最好的镜头:

 ** * Integer modifiable fix length list of an int array or many int's. * * @author Daniel De Leon. */ public class IntegerListWrap extends AbstractList<Integer> { int[] data; public IntegerListWrap(int... data) { this.data = data; } @Override public Integer get(int index) { return data[index]; } @Override public Integer set(int index, Integer element) { int r = data[index]; data[index] = element; return r; } @Override public int size() { return data.length; } } 
  • 支持获取和设置。
  • 没有内存数据重复。
  • 循环中不浪费时间。

例子:

 int[] intArray = new int[]{1, 2, 3}; List<Integer> integerListWrap = new IntegerListWrap(intArray); List<Integer> integerListWrap1 = new IntegerListWrap(1, 2, 3); 

如果您打算使用第三方库,这可以在Eclipse Collections中使用 :

 int[] a = {1, 2, 3}; List<Integer> integers = IntLists.mutable.with(a).collect(i -> i); Assert.assertEquals(Lists.mutable.with(1, 2, 3), integers); 

注意:我是Eclipse集合的提交者。

在Java 8中:

 int[] arr = {1,2,3}; IntStream.of(arr).boxed().collect(Collectors.toList()); 

这是将数组转换为ArrayList的通用方法

 <T> ArrayList<T> toArrayList(Object o, Class<T> type){ ArrayList<T> objects = new ArrayList<>(); for (int i = 0; i < Array.getLength(o); i++) { //noinspection unchecked objects.add((T) Array.get(o, i)); } return objects; } 

用法

 ArrayList<Integer> list = toArrayList(new int[]{1,2,3}, Integer.class); 
  /* Integer[] to List<Integer> */ Integer[] intArr = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; List<Integer> arrList = new ArrayList<>(); arrList.addAll(Arrays.asList(intArr)); System.out.println(arrList); /* Integer[] to Collection<Integer> */ Integer[] intArr = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; Collection<Integer> c = Arrays.asList(intArr);