Инверсия управления в лямбде - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь преобразовать список в ключи Map, и значения по умолчанию равны нулю.
Однако мой код требует создания HashMap с помощью нового ключевого слова, которое противоречит принципу инверсии управления в Spring.

Могу ли я узнать, есть ли в Spring правильный способ инициализации карты в этой ситуации?

convertStringToList(input).stream().collect(HashMap::new, 
             (map, value) -> map.put(value, null), Map::putAll);

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Автопроводка bean-компонента Spring немного отличается от реализации конкретной реализации компонентов, не настроенных для Spring.Не бойтесь ключевого слова new и определенной реализации.

Map<String, String> newMap = convertStringToList(input).stream().collect(HashMap::new, 
         (map, value) -> map.put(value, null), Map::putAll);

Это нормально, поскольку вы собираете Stream в Map, который являетсяинтерфейс.Spring не влияет на то, какая реализация будет использоваться при сборе потока, поэтому вы должны указать, что будет использоваться HashMap (а не TreeMap, например ...).

Если вы это сделаете...

 Map<String, String> a = b.stream().collect(Map::new, 
         (map, value) -> map.put(value, null), Map::putAll);

Вот вам "Cannot instantiate the type Map" - он нуждается в реализации, и Spring не отвечает за его предоставление.

0 голосов
/ 21 декабря 2018

Вы не должны использовать создание экземпляров вручную для специфических компонентов Spring, таких как репозитории, сервисы, классы конфигурации и т. Д.
Однако вполне нормально вручную создавать экземпляры карт и классов коллекций для реализации логики вашего домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...