Java编程中List、Integer[]、int[]之间优雅的相互转换

有时候List和数组int[]转换很麻烦。

List和String[]也同理。难道每次非得写一个循环遍历吗?其实一步就可以搞定。

本文涉及到一些Java8的Stream API。如果没有接触过就先学会怎么用,然后再细细研究。

1、int[] 转 List

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

(1)Arrays.stream(arr) 可以替换成IntStream.of(arr)

(2)使用Arrays.stream将int[]转换成IntStream。

(3)使用IntStream中的boxed()装箱,将IntStream转换成Stream<integer>

(4)使用Stream的collect(Collectors.toList) 方法收集元素,将Stream<T>转换成List<T>

2、int[] 转 Integer[]

int[] data = {4, 5, 3, 6, 2, 5, 1};
Integer[] arr=Arrays.stream(data).boxed().toArray(Integer[]:new);

前两步同上,此时是Stream<Integer>。然后使用Stream的toArray,传入IntFunction<A[]> generator。 这样就可以返回Integer数组。不然默认是Object[]。

3、Integer[] 转 List

Integer[] integers={4, 5, 3, 6, 2, 5, 1};
List<Integer> list = Arrays.asList(integers);

这个就很简单了,通过Arrays类里的asList方法将数组转换为List。

4、Integer[] 转 int[]

Integer[] integers={4, 5, 3, 6, 2, 5, 1};
int[] ints=Arrays.stream(integers).mapToInt(Integer::intValue).toArray();

map的意思是把每一个元素进行同样的操作。mapToInt会把输入的元素转换为int类型并输出。mapToInt(Integer::intValue)方法返回的是IntStream。

5、List 转 int[]

List<Integer> list=new ArrayList<>();
int[] arr=list.stream().mapToInt(Integer::valueOf).toArray();

想要转换成int[]类型,就得先转成IntStream。这里就通过mapToInt()把Stream调用Integer::valueOf来转成IntStream. 而IntStream中默认toArray()转成int[]。

6、List 转 Integer[]

List<Integer> list=new ArrayList<>();
Integer[] integers = list.toArray(new Integer[list.size()]);

这个也很简单,方法里的参数是一个数组,所以要规定长度。也有无参的方法,但是要进行转型,所以不推荐使用。

参考

留言区

还能输入500个字符