前言
针对枚举类的基础用法大家可参考菜鸟教程,本文记录一下稍微复杂点的用法(不同用法的本质是相同的,只是形式有所不同)。
实现
设想这样一个应用场景:根据一个给定的值,如果这个值在某个集合内,就返回特定的 code 和 name 。
定义枚举类
针对如上场景,我们把值的集合定义为一个 List(已给定初始化值) ,在静态方法 getCodeAndNameByStrings()
内对所有的枚举值进行遍历,如果给定的值包含在枚举值的 List 中,那么即返回此枚举值的 code 和 name 。
具体代码如下:
package com.langjialing.helloworld.model.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author 郎家岭伯爵
* @date 2023/3/2 9:06
*/
@Getter
@AllArgsConstructor
public enum EnumTest {
ENUM_TEST_1("code1","name1",new ArrayList<String>(){{
add("string1-1");
add("string1-2");
add("string1-3");
}}),
ENUM_TEST_2("code2","name2",new ArrayList<String>(){{
add("string2-1");
add("string2-2");
add("string2-3");
}}),
ENUM_TEST_3("code3","name3",new ArrayList<String>(){{
add("string3-1");
add("string3-2");
add("string3-3");
}}),;
private String code;
private String name;
private List<String> strings;
public static HashMap<String, String> getCodeAndNameByStrings(String s){
for (EnumTest e:EnumTest.values()){
if (e.strings.contains(s)){
HashMap<String, String> resultMap = new HashMap<>();
resultMap.put("code", e.code);
resultMap.put("name", e.name);
return resultMap;
}
}
return null;
}
}
测试方法
我们新建一个 controller 进行测试:
package com.langjialing.helloworld.controller;
import com.langjialing.helloworld.model.enums.EnumTest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
/**
* @author 郎家岭伯爵
* @date 2023/3/6 9:22
*/
@RestController
public class EnumTestController {
@GetMapping("/enum")
public HashMap<String, String> testEnum(String s){
return EnumTest.getCodeAndNameByStrings(s);
}
}
总结
Java 中枚举类的用法。