Java从两种枚举类型初始化EnumBiMap

问题描述

从两种不同的枚举类型初始化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()])));