1、写在前面
在日常Java学习或项目开发中,经常会遇到需要int[]数组和List列表相互转换的场景,然而,往往一时难以想到有哪些方法,最后可能会使用暴力逐个转换法,往往不是我们所满意的。本文小结了一下常用的集中List和int[]互换的方法。
2、int[]数组转List的方法
(1)创建一个List对象,将int[]数组中的元素逐个添加进去:
/**
* 手动将数组元素逐个放入list中,进行转换
* @param arrays
* @return
*/
public static List<Integer> mannual2List(int[] arrays){
List<Integer> list = new ArrayList<>();
for(int array:arrays){
list.add(array);
}
return list;
}
(2)利用Arrays.asList方法进行转换,注意asList方法返回值是Object类型的:
/**
* 注意Arrays.asList的入参要是对象类型,不能是基本类型,基本类型要转换成对象类型才可以
* @param arrays 对象数组
* @return
*/
public static List<Integer> useAsList2List(Integer[] arrays){
List<Integer> list = new ArrayList<>(Arrays.asList(arrays));
return list;
}
(3)利用Stream进行转换:
/**
* 这里同样也是要使用对象类型,不能直接使用基本类型
* @param arrays
* @return
*/
public static List<Integer> useArraysStream2List(Integer[] arrays){
List<Integer> list = Arrays.stream(arrays).collect(Collectors.toList());
return list;
}
(4)利用CollectionUtils集合工具类进行转换:既可以转换包装类对象,也可以转换基本数据类型对象:
/**使用CollectionUtils将数组转换成List,也可以使用基本数据类型。
*
* @param arrays
* @return
*/
public static List<Integer> useCollectionUtils2List(int[] arrays){
List<Integer> list = CollectionUtils.arrayToList(arrays);
return list;
}
(5)测试示例及结果如下:
public class Array2ListMain {
public static void main(String[] args) {
int[] intArrays = {1,2,3,4,5,6,7,8};
Integer[] integerArrays = {8,7,6,5,4,3,2,1};
List<Integer> mannual2List = mannual2List(intArrays);
System.out.println("手动将数组转换成list:"+mannual2List);
List<Integer> useAsList2List = useAsList2List(integerArrays);
System.out.println("使用Arrays.asList()方法将数组转换成List:"+useAsList2List);
List<Integer> list = useCollectionUtils2List(intArrays);
System.out.println("使用CollectionUtils将数组转换成List:"+list);
}
}
手动将数组转换成list:[1, 2, 3, 4, 5, 6, 7, 8]
使用Arrays.asList()方法将数组转换成List:[8, 7, 6, 5, 4, 3, 2, 1]
使用CollectionUtils将数组转换成List:[1, 2, 3, 4, 5, 6, 7, 8]
3、List转int[]数组的方法
(1)暴力手动法:创建一个数组,将List中的元素逐个添加到数组中:
/**
* 手动创建数组,将list中的元素逐个添加到int[]数组中
* @param list
* @return
*/
public static int[] mannualList2Array(List<Integer> list){
int[] res = new int[list.size()];
int i=0;
for(int num:list){
res[i++]=num;
}
return res;
}
(2)直接使用List的toArray方法,该类型参数传入引用类型:
public static Integer[] list2Array(List<Integer> list){
Integer[] integers = list.toArray(new Integer[0]);//传入参数,表示强转
return integers;
}
(3)使用stream将list转换成数组
public static int[] useStreamlist2Array(List<Integer> list){
//下面三行代码都可以完成这个操作
// int[] arrays = list.stream().mapToInt(Integer::intValue).toArray();
//使用lambda表达式
// int[] arrays = list.stream().mapToInt((Integer i)->i).toArray();
//使用lambda表达式;先使用filter过滤
int[] arrays = list.stream().filter(integer -> integer!=null).mapToInt(i->i).toArray();
return arrays;
}
(4)二维List<int[]>转换成二维数组int[][]:
//二维list转换成list
public static int[][] twoDimensionList2Array(List<int[]> list){
int[][] res = list.toArray(new int[0][0]);
return res;
}
(5)测试示例及结果如下:
public class List2ArrayMain {
public static void main(String[] args) {
int[] intArrays = {1,2,3,4,5,6,7,8};
Integer[] integerArrays = {8,7,6,5,4,3,2,1};
List<Integer> mannual2List = mannual2List(intArrays);
System.out.println("手动将数组转换成list:"+mannual2List);
int[] mannualList2Array = mannualList2Array(mannual2List);
System.out.println("手动将list转换成数组:"+mannualList2Array);
for(int i:mannualList2Array){
System.out.print(i+" ");
}
System.out.println();
Integer[] integers = list2Array(mannual2List);
System.out.println("1.toArray默认方法将array转换成list:");
for(int i:integers){
System.out.print(i+" ");
}
System.out.println();
int[] ints = useStreamlist2Array(mannual2List);
System.out.println("2.使用stream将list转换成array:");
for(int i:ints){
System.out.print(i+" ");
}
System.out.println();
//测试二维数组
List<int[]> res = new ArrayList<>();
res.add(new int[]{1,2});
res.add(new int[]{3,4});
int[][] ints1 = twoDimensionList2Array(res);
System.out.println("2.使用stream将list转换成array:");
for(int[] i:ints1){
for(int i1:i){
System.out.print(i1+" ");
}
}
System.out.println();
}
}
结果输出如下:
手动将数组转换成list:[1, 2, 3, 4, 5, 6, 7, 8]
手动将list转换成数组:[I@73f792cf
1 2 3 4 5 6 7 8
1.toArray默认方法将array转换成list:
1 2 3 4 5 6 7 8
2.使用stream将list转换成array:
1 2 3 4 5 6 7 8
2.使用stream将list转换成array:
1 2 3 4
本文源代码:https://github.com/JianfuYang/2020-yjf-review/tree/master/src/feature/array2list
声明:本文部分内容整理来源于网络,仅做个人学习使用!侵删~