Java - 使用 属性 作为键从流创建 HashMap

Java - create HashMap from stream using a property as a key

我有一个 HashMap,其中 id 是一个键,实体是一个值。我需要创建一个新的 HashMap,其中一个实体的 属性 作为键,整个实体仍然是一个值。所以我写道:

Stream<Link> linkStream = linkMap.values().stream();
HashMap<String, Link> anotherLinkMap = linkStream.collect(Collectors.toMap(l -> l.getLink(), l -> l));

但是编译器说:

Required type:
HashMap<String, Link>
Provided:
Map<Object, Object>
no instance(s) of type variable(s) K, U exist so that Map<K, U> conforms to HashMap<String, Link>

是的,使用for循环很容易写,但我想使用流。我在这里做错了什么?

您正在使用的收集器 returns Map 的某些实现,因此您可以将 anotherLinkMap 的类型更改为 Map<String,Link> 或使用 Map<String,Link> 的四参数版本=15=] 方法:

HashMap<String, Link> anotherLinkMap = linkStream.collect(Collectors.toMap(Link::getLink, link -> link, (link, link2) -> link, HashMap::new));