List列表和int[]数组互转的方法汇总

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

 

 

声明:本文部分内容整理来源于网络,仅做个人学习使用!侵删~

 

  • 24
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Stringint: - 使用Integer.parseInt方法 ```java String str = "123"; int num = Integer.parseInt(str); ``` - 使用Integer.valueOf方法 ```java String str = "123"; Integer num = Integer.valueOf(str); int n = num.intValue(); ``` 2. intString: - 使用String.valueOf方法 ```java int num = 123; String str = String.valueOf(num); ``` - 使用Integer.toString方法 ```java int num = 123; String str = Integer.toString(num); ``` 3. charString: - 使用String.valueOf方法 ```java char c = 'a'; String str = String.valueOf(c); ``` - 将char成char数组,再使用String构造方法 ```java char c = 'a'; char[] arr = {c}; String str = new String(arr); ``` 4. Stringchar: - 使用String的charAt方法 ```java String str = "abc"; char c = str.charAt(0); ``` - 将String成char数组,再取第一个字符 ```java String str = "abc"; char[] arr = str.toCharArray(); char c = arr[0]; ``` 5. int数组List: - 使用Arrays.asList方法 ```java int[] nums = {1, 2, 3}; List<Integer> list = Arrays.asList(nums); ``` - 使用IntStream.of方法,再List ```java int[] nums = {1, 2, 3}; List<Integer> list = IntStream.of(nums).boxed().collect(Collectors.toList()); ``` 6. Listint数组: - 使用Java 8的stream,再int数组 ```java List<Integer> list = Arrays.asList(1, 2, 3); int[] nums = list.stream().mapToInt(Integer::intValue).toArray(); ``` - 使用循环,逐个取出List中的元素,再添加到int数组中 ```java List<Integer> list = Arrays.asList(1, 2, 3); int[] nums = new int[list.size()]; for (int i = 0; i < list.size(); i++) { nums[i] = list.get(i); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值