首页 > 解决方案 > 使用 Java 流将集合转换为映射:如何将预定义的 Enum 作为值

问题描述

我有一个 Long 的集合,出于某种原因,我需要从这个集合中创建一个映射,该映射将集合的元素作为键,并将 1 个预定义的 Enum 作为值(所有键都具有相同的值)。

我正在尝试使用 Streams 来实现这一点,如下所示:

private Map<Long, Marker> mapMarker(Collection<Long> ids, Marker marker) {
    return ids.stream().collect(Collectors.toMap(Function.identity(), marker));
}

编译器因以下错误而失败:

no instance(s) of type variable(s) T, U exist so that Marker conforms to Function<? super T, ? extends U>

有人可以向我解释为什么会失败吗?无论如何,使用 Streams 可以获得预期的结果吗?

标签: javasyntaxjava-stream

解决方案


如果Marker是你想映射到所有键的枚举ids,你可以这样做:

return ids.stream().collect(Collectors.toMap(Function.identity(), id -> marker));

你已经很接近了,正如预期的id -> marker那样FunctionCollectors.toMap


推荐阅读