0

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

但是我丢失了类型信息,所以我得到了错误。有没有更好的方法来获得这个映射?我也不能菊花链 put 因为 put() 只返回值而不是对地图的引用。就我而言,地图也可以是不可变的。

4

2 回答 2

1
import com.google.common.collect.EnumBiMap;
import com.google.common.collect.Streams;
import static java.util.Arrays.stream;

EnumBiMap<First, Second> map = EnumBiMap.create(First.class, Second.class);
Streams.forEachPair(stream(First.values()), stream(Second.values()), map::put);
于 2020-10-08T19:24:22.693 回答
0

您映射的方式似乎通常是映射。然后您可以使用.ordinal()枚举的序数值来创建映射。

EnumBiMap<First, Second>.create(
      Arrays.stream(First.values())
             .collect(Collectors.toMap(Function.identity(),
                                       e -> Second.values()[e.ordinal()])));
于 2020-10-08T18:45:58.557 回答