Eu tenho um fluxo e quero coletá-lo explicitamente em um HashMap. No momento, estou fazendo algo como
List<Item> listToTransform = //initialized and populated
HashMap<K, V> myHashMap = new HashMap<>();
listToTransform.stream().map(/* do my transformation here */)
.forEach(i -> myHashMap.put(i.getKey(), i.getValue()));
Fiquei me perguntando se havia uma maneira de usar os coletores para recuperar explicitamente um HashMap.
Respostas:
6 para resposta № 1Uma das sobrecargas para o Collectors.toMap
O método permitirá que você selecione uma implementação de mapa de sua escolha.
Infelizmente, uma das desvantagens desteA sobrecarga é que ele também requer um método para mesclar dois valores quando eles têm a mesma chave (embora eu faça referência frequentemente a um método que sempre lança nesse caso).
HashMap<K, V> myHashMap = listToTransform.stream().map(/* do my transformation here */)
.collect(Item::getKey, Item::getValue, this::throwIllegalArgumentException, HashMap::new);