我正在尝试创建一个EnumMap
,它将枚举常量简单地映射到其各自的序数。我想我可以这样简洁地完成:
private static Map<Rank, Integer> defaultRankOrdering = new EnumMap<>(
Arrays.stream(Rank.values()).collect(
Collectors.toMap(Function::identity, e -> e.ordinal())));
然而,编译器说它不能推断出toMap
的任何类型变量。我不明白为什么,因为根据toMap
的两个参数的签名:
public static <T, K ,U> Collector<T, ? ,Map<K, U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper)
T
应被推断为 Rank
,因为 Arrays.stream(Rank.values())
是一个 Stream<Rank>
,K
应该也被推断为 Rank
,因为 Function.identity
返回一个 Function<T, T>
,U
应被推断为 Integer
,因为 Enum.ordinal
的返回类型是 int
,在这种情况下应该将其装箱为 Integer
。
非常感谢您的帮助。