2 回答
TA贡献1735条经验 获得超5个赞
正如您的标题所述,对单个对象有多个键,我想您想将List中的每个对象映射到相同的enum元素,就像有几种获取它的方法一样
它将遍历枚举,对于每个枚举,将使用List<Strings>并创建一些Entry(键/值)并将它们关联以构建地图
我为演示添加了一个基本的枚举,其中myFunction以小写和大写形式返回枚举的名称
enum AirplaneBrand{
AIRBUS(Arrays.asList("A380","A330")),
BOEING(Arrays.asList("787","737"));
private List<String> values;
AirplaneBrand(List<String> values){ this.values = values; }
public List<String> myFunction(){ return values; }
}
public static void main(String[] args){
final Map<String, AirplaneBrand> MY_MAP =
Stream.of(AirplaneBrand.values())
.flatMap(en -> en.myFunction().stream().map(elt -> new AbstractMap.SimpleEntry<String,AirplaneBrand>(elt, en)))
.collect(toMap(Entry::getKey, Entry::getValue));
System.out.println(MY_MAP); // {A330=AIRBUS, A380=AIRBUS, 787=BOEING, 737=BOEING}
System.out.println(MY_MAP.get("737")); // BOEING
System.out.println(MY_MAP.get("A380")); // AIRBUS
}
}
TA贡献1827条经验 获得超4个赞
我建议多加一行
private static final Map<String, MyEnumType> MY_MAP;
static {
Map<String, MyEnumType> local = new HashMap<>();
EnumSet.allOf(MyEnumType.class).forEach(e -> e.getValues().forEach(s -> local.put(s, e)));
MY_MAP = Collections.unmodifiableMap(local);
}
哪个结果
public enum MyEnumType {
RED(List.of("red", "dark red")),
BLUE(List.of("blue", "light blue", "dark blue"));
private List<String> values;
MyEnumType(List<String> values)
{
this.values = values;
}
public List<String> getValues()
{
return values;
}
}
到映射
red -> RED
blue -> BLUE
light blue -> BLUE
dark red -> RED
dark blue -> BLUE
添加回答
举报