Ich habe einen Stream und möchte ihn explizit in einer HashMap sammeln. Im Moment mache ich so etwas wie
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()));
Ich habe mich gefragt, ob es eine Möglichkeit gibt, Collectors zu verwenden, um eine HashMap explizit zurückzugewinnen.
Antworten:
6 für die Antwort № 1Eine der Überladungen zum Collectors.toMap
Mit dieser Methode können Sie eine Kartenimplementierung Ihrer Wahl auswählen.
Leider ist dies einer der NachteileÜberladung ist, dass es auch eine Methode erfordert, um zwei Werte zusammenzuführen, wenn sie den gleichen Schlüssel haben (obwohl ich oft auf eine Methode verweise, die in diesem Fall immer auslöst).
HashMap<K, V> myHashMap = listToTransform.stream().map(/* do my transformation here */)
.collect(Item::getKey, Item::getValue, this::throwIllegalArgumentException, HashMap::new);