java集合之间的相互转换——高效、完整

目录

1、数组  —》 List

2、List  —》 数组

3、List —》 Set / Set —》 List

4、List -》 Map

5、Map  —》 List / Set

6、List —》 List / Set


1、数组  —》 List

将数组转换成集合,数组必须是引用数据类型,如果基本数据类型的数组转换成集合,会将整个数组当作一个对象转换 ;

Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。

private static void arrToList(){
        // 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
        // 输出:[[I@3830f1c0]
        int[] arr = {1, 2, 3, 4, 5};
        List<int[]> list = Arrays.asList(arr);
        System.out.println(list);

        // 将数组转换成集合,数组必须是引用数据类型
        // 輸出:[1, 2, 3, 4, 5]
        Integer[] arr2 = {1, 2, 3, 4, 5};
        // Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
        List<Integer> list2 = Arrays.asList(arr2);
        
        // 再次新建List就可以了
        List<Integer> list3 = new ArrayList<>(list2);
        list3.add(7);
        System.out.println(list2);
        System.out.println(list3);
    }

2、List  —》 数组

 private static void arrToList(){
        // 数组必须是引用数据类型
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            list.add("1-"+i);
        }
        String[] arr = new String[list.size()];
        list.toArray(arr);
        System.out.println(Arrays.toString(arr));
    }

3、List —》 Set / Set —》 List

将 List 集合转为 Set 集合,是可以直接去重的。

 private static void listToSet(){
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            list.add("1-"+i);
        }
        // 直接new一个对象,将list放入即可
        Set<String> set = new HashSet<>(list);
        System.out.println(set.toString());
    }

Set 集合转 List 集合类似,直接 new 一个 List 对象,将 set 集合放入即可

 4、List -》 Map

如果我们的 List 存放的对象,我们想要将其转化为 Map 集合,key为对象的某个属性。(使用Stream流实现)

实体类:

/**
 * @author MouFangCai
 * @date 2019/8/2 10:41
 */
public class TestEntity {
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "TestEntity{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
 private static void listToMap(){
        List<TestEntity> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            TestEntity testEntity = new TestEntity();
            testEntity.setId(i);
            testEntity.setName("name-"+i);
            list.add(testEntity);
        }
        System.out.println(list.toString());
        // 使用stream流的方式实现,高效
        // 此处map的key是 TestEntity的id
        Map<Integer, TestEntity> map = list.stream().collect
                (Collectors.toMap(TestEntity::getId, Function.identity(), (key1, key2) -> key2));
        System.out.println(map.toString());
    }

5、Map  —》 List / Set

 private static void mapToList(){
        Map<Integer, TestEntity> map = new HashMap<>();
        for (int i = 0; i < 4; i++) {
            TestEntity testEntity = new TestEntity();
            testEntity.setId(i);
            testEntity.setName("name-"+i);
            map.put(i, testEntity);
        }
        // 直接获取map的key的set集合
        Set<Integer> set1 = map.keySet();
        // 将map的values 转换为Set集合
        Set<TestEntity> set = new HashSet<>(map.values());
        // 将map的values 转换为List集合
        List<TestEntity> list = new ArrayList<>(map.values());

        System.out.println(set.toString());
        System.out.println(list.toString());
    }

6、List —》 List / Set

需求:List1 集合存放是对象,我们希望直接从集合里获取到 对象的某个属性的 List2  集合 (使用Stream流实现)

 private static void listToList(){
        List<TestEntity> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            TestEntity testEntity = new TestEntity();
            testEntity.setId(i);
            testEntity.setName("name-"+i);
            list.add(testEntity);
        }
        // 获取到 name的list集合
        List<String> list1 = list.stream().map(TestEntity::getName).collect(Collectors.toList());
        // 获取到 name的set集合
        Set<String> set = list.stream().map(TestEntity::getName).collect(Collectors.toSet());
        System.out.println(list1.toString());
    }

 


版权声明:本文为qq_36095679原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。