Java - создать HashMap из потока, используя свойство в качестве ключа - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть 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 l oop, но я хотел бы использовать поток. Что я здесь не так делаю?

1 Ответ

3 голосов
/ 09 апреля 2020

Используемый вами коллектор возвращает некоторую реализацию Map, поэтому вы либо меняете тип anotherLinkMap на Map<String,Link>, либо используете версию с четырьмя аргументами toMap метода:

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