问题描述
从两种不同的枚举类型初始化EnumBiMap的最便捷方法是什么?我有以下情况:
public enum First {
A,B,C
}
和
public enum Second {
ALPHA,BETA,GAMMA
}
我尝试过类似的事情
private static EnumBiMap<First,Second> typeMap =
EnumBiMap<First,Second>.create(
Arrays.stream(First.values()).collect(Collectors.toMap(
Function.identity(),type -> {
switch(type) {
case First.A:
return Second.ALPHA;
case First.B:
return Second.BETA;
default:
return Second.GAMMA
}})));
但是我丢失了类型信息,所以我得到了错误。有没有更好的方法来获取此映射?我也不能以菊花链方式放置puts,因为put()仅返回值,而不是对地图的引用。就我而言,地图也可能是不可变的。
解决方法
new
,
您映射的方式看起来像是常规映射。然后,您可以使用枚举的.ordinal()
使用序数值来创建地图。
EnumBiMap<First,Second>.create(
Arrays.stream(First.values())
.collect(Collectors.toMap(Function.identity(),e -> Second.values()[e.ordinal()])));