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

标签 java hashmap java-stream collectors

我有一个 HashMap,其中 id 是键,entity 是值。我需要创建一个新的 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循环编写它很容易,但我想使用流。我在这里做错了什么?

最佳答案

您正在使用的收集器返回 Map 的一些实现所以要么你改变 anotherLinkMap 的类型至Map<String,Link>或使用 toMap 的四个参数版本方法:

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

关于Java - 使用属性作为键从流创建 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61116304/

相关文章:

java - 如何调整一条线上的元件位置

java - MySQL:运行后返回SUCCESS

java - 是否可以仅同步 java 流中的终端方法调用?

java - 如何在 Java 中读取多行输入

java - 对对象 HashMap 进行排序(不按键)

c++ - 搜索字符串的最快方法

redis - 有没有办法将散列键的值设置为Redis中某个键的值

java - 根据 toMap 集合中的值过滤流

java - 我可以在流式传输时向集合中添加新对象吗?

java - 为什么 TextView(带有 ID)不自动保存它的状态?