Java 枚举获取映射

在Java中,枚举是一种特殊的数据类型,它定义了一个固定数量的常量集合。枚举常常用于表示一组相关的常量,例如颜色、星期几等。在实际开发中,我们经常需要将枚举值与其他的数据进行映射,例如将枚举值映射到数据库中的存储值,或者将枚举值映射到对应的文本描述。

本文将介绍如何使用Java枚举获取映射,并提供相应的代码示例。

枚举的定义和使用

在Java中,我们可以使用enum关键字定义一个枚举类型。以下是一个表示星期几的枚举的示例:

public enum DayOfWeek {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

我们可以使用这个枚举类型来声明变量,并通过枚举常量来初始化变量:

DayOfWeek day = DayOfWeek.MONDAY;

枚举映射到整数值

有时候,我们需要将枚举值映射到整数值,例如将星期几映射到1-7的整数。Java中的枚举类型提供了一个ordinal()方法,它可以返回一个枚举常量在枚举中的位置(从0开始)。我们可以利用这个方法来实现枚举到整数的映射:

public enum DayOfWeek {
    MONDAY(1),
    TUESDAY(2),
    WEDNESDAY(3),
    THURSDAY(4),
    FRIDAY(5),
    SATURDAY(6),
    SUNDAY(7);

    private final int value;

    private DayOfWeek(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

然后我们就可以通过调用getValue()方法来获取枚举值对应的整数值:

DayOfWeek day = DayOfWeek.MONDAY;
int value = day.getValue();
System.out.println(value);   // 输出:1

枚举映射到字符串

另一种常见的需求是将枚举值映射到字符串,例如将星期几映射到相应的英文名称。我们可以为枚举类型添加一个字段来保存映射的字符串,并提供一个方法来获取它:

public enum DayOfWeek {
    MONDAY("Monday"),
    TUESDAY("Tuesday"),
    WEDNESDAY("Wednesday"),
    THURSDAY("Thursday"),
    FRIDAY("Friday"),
    SATURDAY("Saturday"),
    SUNDAY("Sunday");

    private final String name;

    private DayOfWeek(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

然后我们就可以通过调用getName()方法来获取枚举值对应的字符串:

DayOfWeek day = DayOfWeek.MONDAY;
String name = day.getName();
System.out.println(name);   // 输出:Monday

枚举的遍历

有时候,我们需要遍历枚举中的所有值。Java中的枚举类型提供了一个静态方法values(),它可以返回一个包含所有枚举常量的数组。我们可以利用这个方法来遍历枚举中的所有值:

for (DayOfWeek day : DayOfWeek.values()) {
    System.out.println(day);
}

输出结果为:

MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY

枚举与映射的应用

枚举的映射功能在实际开发中有很多应用场景。以下是一个使用枚举和映射来表示任务状态的示例:

import java.util.HashMap;
import java.util.Map;

public enum TaskStatus {
    PENDING("Pending"),
    IN_PROGRESS("In Progress"),
    COMPLETED("Completed");

    private final String name;

    private TaskStatus(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    private static final Map<String, TaskStatus> map = new HashMap<>();