Java 8 List 转换 Map 再转换 Set 教学

在 Java 8 中,使用 Stream API 使集合(List、Map、Set)之间的转换变得非常简单。若你想要将一个 List 转换为 Map,然后再将该 Map 转换为 Set,本文将为你详细讲解这个过程。

处理流程

下面是这整个转化过程的步骤:

步骤 描述
1 准备一个 List 数据
2 将 List 转换为 Map
3 从 Map 转换为 Set

下面的 Mermaid 图表显示了这个流程的可视化图示:

flowchart TD
    A[准备 List 数据] --> B[转换为 Map]
    B --> C[转换为 Set]

各步骤详细实现

1. 准备一个 List 数据

在这一步,我们需要首先创建一个包含数据的 List。假设我们使用一个简单的学生类 Student,包含学生的姓名和成绩。

import java.util.ArrayList;
import java.util.List;

class Student {
    String name;
    int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    // Getter
    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

public class Main {
    public static void main(String[] args) {
        // 1. 创建一个学生列表
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 92));
        students.add(new Student("Charlie", 78));

        // 接下来,我们将在这里进行 List 到 Map 的转换
    }
}

此代码块创建一个学生列表,将学生对象加入到 ArrayList 中。

2. 将 List 转换为 Map

我们将使用 Collectors.toMap() 方法来将 List 转换为一个 Map。在这里,我们将学生的姓名作为键,成绩作为值。

import java.util.Map;
import java.util.stream.Collectors;

Map<String, Integer> studentMap = students.stream()
    .collect(Collectors.toMap(Student::getName, Student::getScore));

此代码块通过流式操作,将 List 转换为 Map,以学生的姓名作为键,成绩作为值。

3. 从 Map 转换为 Set

最后,我们将从这个 Map 中提取出所有的姓名,并将其转换为一个 Set。可以使用 keySet() 方法来获取 Map 的所有键。

import java.util.Set;

Set<String> studentNamesSet = studentMap.keySet()
    .stream()
    .collect(Collectors.toSet());
    
// 打印出 Set
System.out.println(studentNamesSet);

此代码块通过将 Map 的键转换为 Set,最终得到了一个包含学生姓名的 Set 集合。

完整代码示例

现在将以上所有代码整合在一起,你就可以得到完整的实现。

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

class Student {
    String name;
    int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }
}

public class Main {
    public static void main(String[] args) {
        // 1. 创建一个学生列表
        List<Student> students = new ArrayList<>();
        students.add(new Student("Alice", 85));
        students.add(new Student("Bob", 92));
        students.add(new Student("Charlie", 78));

        // 2. 将 List 转换为 Map
        Map<String, Integer> studentMap = students.stream()
            .collect(Collectors.toMap(Student::getName, Student::getScore));

        // 3. 从 Map 转换为 Set
        Set<String> studentNamesSet = studentMap.keySet()
            .stream()
            .collect(Collectors.toSet());

        // 输出结果
        System.out.println(studentNamesSet);
    }
}

总结

通过以上的步骤,我们实现了将一个 List 转换为 Map,然后再将 Map 转换为 Set 的完整流程。使用 Java 8 的 Stream API,不仅使得这些操作更加简洁清晰,也提升了代码的可读性。

希望本文对你理解 Java 8 中 List、Map 和 Set 的转换有所帮助!如有任何问题,欢迎提问。