1.问题发掘:
在实际的业务开发中,我们通常会进行数组转List的操作,通常我们会使用Arrays.asList来进行转换
但是在转换基本类型的数组的时候,却出现转换的结果和我们想象的不一致。
上代码
int[] arr = {1, 2, 3}; List list = Arrays.asList(arr); System.out.println(list.size()); // 1 //实际上,我们想要转成的List应该是有三个对象而现在只有一个 |
可以观察到 asList方法 接收的是一个泛型T类型的参数,T继承Object对象
public static List asList(T... a) { return new ArrayList<>(a); } |
所以通过断点我们可以看到把 int数组 整体作为一个对象,返回了一个 List<int[]>
2.解决思路:
2.1 Java8以上,利用Arrays.stream(arr).boxed()将装箱为Integer数组
List collect = Arrays.stream(arr).boxed().collect(Collectors.toList()); System.out.println(collect.size()); System.out.println(collect.get(0).getClass()); // 3 // class java.lang.Integer |
2.2 声明数组的时候,声明类型改为包装类型
Integer[] integerArr = {1, 2, 3}; List integerList = Arrays.asList(integerArr); System.out.println(integerList.size()); System.out.println(integerList.get(0).getClass()); // 3 // class java.lang.Integer |