快捷搜索: 王者荣耀 脱发

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>的流对象。

经验分享 程序员 微信小程序 职场和发展