目录

    • 一. 一个参数
    • 二. 两个参数
    • 三. 接口聚合多个枚举类
    • 四. 枚举类初始化Map与List



    一. 一个参数

    // 性别枚举类
    public enum SexTypes {
    
        男性("1"),
        女性("2");
        
        private String code;
    
        SexTypes(String code) {
            this.code = code;
        }
    
        public String getCode() {
            return code;
        }
    
        // 根据code获取枚举类对象,例如根据1获取男性枚举类对象;根据2获取女性枚举类对象
        public static SexTypes fromCode(String code) {
    
            return Arrays.stream(SexTypes.values())
                    .filter(item -> item.code.equals(code))
                    .findAny()
                    .orElse(null);
        }
        
        // 根据汉字类获取枚举类对应,例如根据男性获取男性枚举类对象;根据女性获取女性枚举类对象
        public static SexTypes fromName(String name) {
    
            return Arrays.stream(SexTypes.values())
                    .filter(item -> item.name().equals(name))
                    .findAny()
                    .orElse(null);
        }
    }
    
    // 使用(通过枚举类来将汉字翻译为code)
    Strnig sexType = "男性";
    SexTypes fromNameSex = SexTypes.fromName(sexType);
    // 通过枚举类对象获取code
    Strnig code = fromNameSex.getCode();
    // 通过枚举类对象获取枚举类名称
    String name = fromNameSex.name();

    二. 两个参数

    // 依赖内容枚举类
    public enum IrainaiyouTypes {
    
        依頼1(new BigDecimal(1), 2),
        依頼2(new BigDecimal(2), 2),
        依頼3(new BigDecimal(3), 10),
        依頼4(new BigDecimal(4), 10),
        依頼5(new BigDecimal(5), 4),
        依頼6(new BigDecimal(6), 2),
        依頼7(new BigDecimal(7), 1);
    
        // code
        private BigDecimal code;
        // 通知者人数
        private int tuchiNinzu;
    
        // 构造方法
        IrainaiyouTypes(BigDecimal code, int tuchiNinzu) {
            this.code = code;
            this.tuchiNinzu = tuchiNinzu;
        }
    
        public BigDecimal getCode() {
            return code;
        }
    
        public int getTuchiNinzu() {
            return tuchiNinzu;
        }
    
        public static IrainaiyouTypes fromCode(BigDecimal code) {
    
            for (IrainaiyouTypes item : IrainaiyouTypes.values()) {
                if (item.code.equals(code)) {
                    return item;
                }
            }
            return null;
        }
    }
    
    // 使用(可以不直接硬编码code,而是通过汉字这种有语义的方式获取,增加了可读性)
    BigDecimal code = IrainaiyouTypes.依頼1.getCode();
    int tuchiNinzu = IrainaiyouTypes.依頼1.getTuchiNinzu();

    三. 接口聚合多个枚举类

    import java.util.Arrays;
    
    // 枚举类的聚合接口
    public interface AggregationEnum {
    	
    	String getCode();
    	
    	// ⏹咖啡枚举类
    	enum Coffee implements AggregationEnum {
    		
    		黑咖啡,
    		低卡咖啡,
    		拿铁,
    		卡布奇诺;
    
    		@Override
    		public String getCode() {
    			return null;
    		}
    	}
    	
    	// ⏹性别枚举类
    	enum SEX implements AggregationEnum {
    		
    		男("1"),
    		女("2");
    		
    		String code; 
    
    		SEX(String code) {
    			this.code = code;
    		}
    		
    		@Override
    		public String getCode() {
    			return code;
    		}
    		
    		// 根据code获取枚举类对象
    		public static SEX fromCode(String code) {
    			return Arrays.stream(SEX.values())
    						.filter(item -> item.code.equals(code))
    						.findAny()
    						.orElse(null);
    		}
    		
    		// 根据名称获取枚举类对象
    		public static SEX fromName(String name) {
    			return Arrays.stream(SEX.values())
    						.filter(item -> item.name().equals(name))
    						.findAny()
    						.orElse(null);
    		}
    	}
    }

    使用

    // 使用接口聚合枚举类
    Coffee[] coffees = AggregationEnum.Coffee.values();
    Arrays.stream(coffees).forEach(item -> {
    	System.out.println(item.name());
    });
    System.out.println("=== === ===");
    
    SEX[] sexs = AggregationEnum.SEX.values();
    Arrays.stream(sexs).forEach(item -> {
    	System.out.println("名称为: " + item.name() + ", code为: "+ item.getCode());
    });
    /*
    	BLACK_COFFEE
    	DECAF_COFFEE
    	LATTE
    	CAPPUCCINO
    	=== === ===
    	名称为: 男, code为: 1
    	名称为: 女, code为: 2
    */

    四. 枚举类初始化Map与List

    ⏹枚举类接口

    public interface EnumValueName {
    
        Integer getValue();
    
        String getName();
    }

    ⏹属性中包含List与Map的枚举类

    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public enum GenderEnum implements EnumValueName {
    
        MALE(1, "男"),
        FEMALE(0, "女");
    
        // 性别值数组
        public static final List<Integer> genderValueList = Arrays.stream(values()).map(GenderEnum::getValue).collect(Collectors.toList());
    
        // 性别名数组
        public static final List<String> genderNameList = Arrays.stream(values()).map(GenderEnum::getName).collect(Collectors.toList());
    
        // 性别值与性别名Map
        public static final Map<Integer, String> genderValNameMap = Arrays.stream(values()).collect(
                Collectors.toMap(
                    GenderEnum::getValue,
                    GenderEnum::getName
                )
        );
    
        // 性别名与性别值Map
        public static final Map<String, Integer> genderNameValMap = Arrays.stream(values()).collect(
                Collectors.toMap(
                    GenderEnum::getName,
                    GenderEnum::getValue
                )
        );
    
        // 性别值
        private final Integer value;
    
        // 性别名
        private final String name;
    
        GenderEnum(Integer value, String name) {
            this.value = value;
            this.name = name;
        }
    
        @Override
        public Integer getValue() {
            return value;
        }
    
        @Override
        public String getName() {
            return name;
        }
    }

    ⏹使用

    // 获取性别枚举类总的所有性别名称List
    List<String> genderNameList = GenderEnum.genderNameList;
    System.out.println(genderNameList);  // [男, 女]
    
    // 获取性别枚举类总的所有性别值List
    List<Integer> genderValueList = GenderEnum.genderValueList;
    System.out.println(genderValueList);  // [1, 0]
    
    // 获取性别枚举类总的所有性别值与性别名Map
    Map<Integer, String> genderValNameMap = GenderEnum.genderValNameMap;
    System.out.println(genderValNameMap);  // {0=女, 1=男}
    
    // 获取性别枚举类总的所有性别名与性别值Map
    Map<String, Integer> genderNameValMap = GenderEnum.genderNameValMap;
    System.out.println(genderNameValMap);  // {女=0, 男=1}
    
    // 获取所有的枚举类对象
    GenderEnum[] genderEnums = GenderEnum.values(); 
    // ※打印的是枚举类对象
    System.out.println(Arrays.toString(genderEnums));  // [MALE, FEMALE]