java中list与数组相互转换
java中,list转数组,很方便,list本身自带一个方法toArray(),但是这个方法默认返回的数组类型是Object,我们可以给toArray()方法传递一个类型参数,指定最终数组类型。
package org.example; import java.util.*; public class List2Array { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("hello"); list.add("world"); list.add("java"); String[] strs = list.toArray(new String[0]); System.out.println(String.join(",", strs)); } }
这个参数,是一个实例化的数组,一般指定数组长度为list元素个数,但是我们可以默认设置0。这种办法是最简单的,还有一个办法就是遍历集合,然后向数组中添加元素。
再来说说将数组转为list集合,一般而言,Arrays.asList()就可以将一个数组转为List,但是这种办法得到的数组,是无法使用add,size等一系列方法的,虽然编译不会报错,但是运行的时候报错,所以最保险的做法就是,声明一个ArrayList实例,然后调用Collections.addAll(list,array)来将数组元素加入list集合中。还有一种办法就是,将Arrays.asList()生成的集合对象,再次以参数的形式赋值给ArrayList。
package org.example; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class Array2List { public static void main(String[] args) { String[] strs = new String[]{"hello","world","java"}; // 1 List<String> list = new ArrayList<>(); Collections.addAll(list,strs); System.out.println(list); // 2 List<String> strs2 = Arrays.asList(strs); strs2.add("test"); // 编译不报错,运行报错。 System.out.println(strs2); List<String> list2 = new ArrayList<>(strs2); System.out.println(list2); } }
运行结果:
另外,如果数组是int基础类型的数组int[],我们在转list集合的时候,可以考虑使用IntStream流box()方法来先将它转为Stream<Integer>,再使用Stream方法直接转为List集合。
package org.example; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; public class IntArray2List { public static void main(String[] args) { int[] nums = new int[]{1,3,4}; List<Integer> list = IntStream.of(nums).boxed().collect(Collectors.toList()); list.add(5); System.out.println(list); } }
运行结果:
box()的作用就是将IntStream转为Stream<Integer>。 集合类型需要的是包装类型,所以int[]数组需要经历一次Integer[]的转化,直观的做法是遍历,但是这里巧妙的借助IntStream来直接转为Stream<Integer>的流对象。