Cześć,
Czy da się w Javie zrobić funkcyjnie mapowanie wartości mapy na inne wartości?
Dla przykładu, elementy listy można przemapować na elementy innej listy
List<A1> lista1 = new LinkedList<>();
// wypelniamy lista1
List<A2> lista2 = new LinkedList<>();
lista2 = lista1.stream().map(a1 -> a2).collect(Collectors.toList());
Czy można w podobny sposób zrobić to na wartościach mapy, tak by parze wejściowej <k,v1>
odpowiadała para wyjściowa <k,v2>
, gdzie zachodzi mapowanie v1->v2
. Albo jeszcze lepiej: <k, Optional<v1>> -> <k, Optional<v2>>
W tej chwili jedyne rozwiązanie jakie mi przychodzi do głowy to coś w tym stylu:
Map<K, V1> keysAndValues1;
Map<K, V2> keysAndValues2 = new HashMap<>();
keysAndValues1.forEach(new BiConsumer<K, V1>() {
@Override
public void accept(K key, V1 v1) {
V2 v2 = mapV1toV2(v1);
keysAndValues2.put(key, v2);
}
});
Ale zainspirowany wpisem @jarekr000000 o Monadach zachciało mi się szukać bardziej eleganckich rozwiązań.