Java 我可以在枚举内的值之间映射吗?
我创建了enum,它有两个值:品牌名称和品牌代码Java 我可以在枚举内的值之间映射吗?,java,spring-boot,java-8,enums,Java,Spring Boot,Java 8,Enums,我创建了enum,它有两个值:品牌名称和品牌代码 我想通过输入品牌名称来了解品牌代码 我还想通过输入品牌代码来了解品牌名称 使用枚举可以解决此问题吗?还是其他代码更有效?我想把代码尽量缩短 我创建了以下代码来搜索品牌代码。如果我想反之亦然,我可以创建另一个Hashmap和方法来将代码转换为品牌。但这是解决问题的有效方法吗 公共枚举品牌{ 可乐(“可乐”,“CL8935”), 面包(“面包”,“BR2810”), 窃笑者(“窃笑者”、“SN4423”); 私有静态最终映射由_BRAND=new H
我想通过输入品牌名称来了解品牌代码
我还想通过输入品牌代码来了解品牌名称
使用枚举可以解决此问题吗?还是其他代码更有效?我想把代码尽量缩短 我创建了以下代码来搜索品牌代码。如果我想反之亦然,我可以创建另一个Hashmap和方法来将代码转换为品牌。但这是解决问题的有效方法吗
公共枚举品牌{
可乐(“可乐”,“CL8935”),
面包(“面包”,“BR2810”),
窃笑者(“窃笑者”、“SN4423”);
私有静态最终映射由_BRAND=new HashMap()生成;
静止的{
对于(品牌:价值观()){
按品牌放置(品牌代码、品牌、品牌);
}
}
私人最终串品牌;
私有最终字符串代码;
公共静态字符串转换器代码(字符串品牌){
通过_BRAND.get(BRAND.toLowerCase()).toString()返回;
}
}
更新-添加完整枚举(带导入)
品牌
中的简单静态方法应做到:
public static String getBrand(String code) {
for(Brand b : Brand.values()){
if(b.getCode().equals(code)) return b.getBrand();
}
return null;
}
类似地,您可以编写getCode(字符串品牌)
编辑:假设两个属性的值不相同,可以选中“使用相同的方法进行bi di映射”:
public static String getOtherAttribute(String value) {
for(Brand b : Brand.values()){
if(b.getCode().equals(value)) return b.getBrand();
if(b.getBrand().equals(value)) return b.getCode();
}
return null;
}
如果两个属性可能具有相同的值,则可以在方法的签名中添加一个参数(标志),以告知要检索的属性。这非常有效。或者,如果只是几个项目,也可以循环。或者使用BiMap。您似乎在这里混淆了许多内容,而没有显示其余的代码。@chrylis我没有把所有内容都放在这里,因为我的问题就在这里。代码的其余部分只是调用此枚举中的方法的主类。调用
Brand.convertocode(“品牌输入”)的代码片段代码>只需注意:使用code
作为put
中的键,但是brand.toLowerCase
作为get
中的键-确保不会返回任何值(假设idbrand
是构造函数中的第一个值,如“cola”
,而code
是构造函数中的第二个值,如“CL8935”
)-这里似乎混合了这两种情况(有效是一个非常广泛的术语)@CarlosHeuberger oops,关键应该是品牌
。此方法是在Enum类中创建的吗?因为我无法解析数组类型。快速修复也不建议我导入它。嗯,我会用完整的类(包括导入)更新我的答案。问题是“我想通过输入品牌名称来知道品牌代码。我也想通过输入品牌代码来知道品牌名称。”所以要完全回答这个问题,你还需要另外两种方法,如:public static String getBrand(String code){return findBy(code,Brand::getCode).getBrand();}
当然可以,这个方法会起作用..我只是想知道是否可以在一个方法中映射双向关系:D
public static void main(String[] args) {
Brand brand1 = Brand.findBy("cola", Brand::getBrand);
Brand brand2 = Brand.findBy("BR2810", Brand::getCode);
}
public static String getBrand(String code) {
for(Brand b : Brand.values()){
if(b.getCode().equals(code)) return b.getBrand();
}
return null;
}
public static String getOtherAttribute(String value) {
for(Brand b : Brand.values()){
if(b.getCode().equals(value)) return b.getBrand();
if(b.getBrand().equals(value)) return b.getCode();
}
return null;
}