Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在枚举内的值之间映射吗?_Java_Spring Boot_Java 8_Enums - Fatal编程技术网

Java 我可以在枚举内的值之间映射吗?

Java 我可以在枚举内的值之间映射吗?,java,spring-boot,java-8,enums,Java,Spring Boot,Java 8,Enums,我创建了enum,它有两个值:品牌名称和品牌代码 我想通过输入品牌名称来了解品牌代码 我还想通过输入品牌代码来了解品牌名称 使用枚举可以解决此问题吗?还是其他代码更有效?我想把代码尽量缩短 我创建了以下代码来搜索品牌代码。如果我想反之亦然,我可以创建另一个Hashmap和方法来将代码转换为品牌。但这是解决问题的有效方法吗 公共枚举品牌{ 可乐(“可乐”,“CL8935”), 面包(“面包”,“BR2810”), 窃笑者(“窃笑者”、“SN4423”); 私有静态最终映射由_BRAND=new H

我创建了enum,它有两个值:品牌名称和品牌代码
我想通过输入品牌名称来了解品牌代码
我还想通过输入品牌代码来了解品牌名称
使用枚举可以解决此问题吗?还是其他代码更有效?我想把代码尽量缩短

我创建了以下代码来搜索品牌代码。如果我想反之亦然,我可以创建另一个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
中的键-确保不会返回任何值(假设id
brand
是构造函数中的第一个值,如
“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;
   }