【各种**问题系列】Java 数组集合之间的相互转换

2023-12-25 18:37:50

📌 问题点:

? ? ? ? 在 Coding 过程中经常会遇到数组、List、Set、Map 之间的相互转换......这里记录一下转换的几种方式。😶😶😶

目录

📌 集合转换

1.数组 转 List:

2.List 转 数组:

3.List 转?Set /?Set 转?List:

4.List 转?Map:

5.Map 转?List / Set:

6.List 转?List / Set:

📌 拓展知识点


📌 集合转换:

1.数组 转 List:

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

? ? ? ? 最简单的方法就是使用 for 循环遍历:

private static void arrToList() {
    int[] arr = {1, 2, 3, 4, 5};
    // 注意基础数据类型转换为对应的包装类型(集合中存储引用类型)
    ArrayList<Integer> arrayList = new ArrayList<>();
    for (int i = 0; i < arr.length; i++) {
        arrayList.add(arr[i]);
    }
}

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

private static void arrToList() {
    // 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
    // 输出:数组地址
    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 转 数组:

? ? ? ? 使用 List 中定义的 API 转换:

private static void listToArr() {
    // 数组必须是引用数据类型
    List<String> list = new ArrayList<>();
    for (int i = 0; i < 4; i++) {
        list.add("List元素:" + 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("List元素:"+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 流 API 实现)

public class TestEntity {
    private Integer id;
    private String 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;
    }
    
    @Override
    public String toString() {
        return "TestEntity{" +
                "id=" + id +
                ", 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());
}

📌 拓展知识点:

? ? ? ? 针对集合的操作使用 JDK 8 新特性 Stream 流 API 操作更方便!!!

Java 8 Stream | 菜鸟教程 (runoob.com)icon-default.png?t=N7T8https://www.runoob.com/java/java8-streams.html

文章来源:https://blog.csdn.net/weixin_52058417/article/details/135205660
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。