如何在Java 8中将流转换为HashMap(而不是Map)

ale*_*lov 3 java hashmap java-8 java-stream

我有一个流,我想明确地将它收集到HashMap中.现在,我正在做类似的事情

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()));
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以使用收集器来显式获取HashMap.

Joe*_*e C 6

Collectors.toMap方法的一个重载将允许您选择您选择的地图实现.

不幸的是,这个重载的一个缺点是它还需要一个方法来合并两个值,当它们具有相同的键时(尽管我经常引用一种总是在这种情况下抛出的方法).

HashMap<K, V> myHashMap = listToTransform.stream().map(/* do my transformation here */)
.collect(Item::getKey, Item::getValue, this::throwIllegalArgumentException, HashMap::new);
Run Code Online (Sandbox Code Playgroud)