Я хочу преобразовать Map<String, Integer>
в другой Map<String, Long>
с помощью карты функций в Java 8, сопоставляя данные с функциями с помощью ключа на обеих картах. Вы можете предположить, что обе карты имеют одинаковые ключи.
Я попробовал следующий подход:
Map<String, Integer> inputData = new HashMap<>();
inputData.put("A",8);
inputData.put("B",7);
inputData.put("C",6);
Map<String, Function<Integer, Long>> transformers = new HashMap<>();
transformers.put("A", x -> x*2L);
transformers.put("B", x -> x+3L);
transformers.put("C", x -> x+11L);
Map<String, Long> mappedData = inputData.entrySet().stream()
.map(entry -> new AbstractMap.SimpleEntry<>(
entry.getKey(),
transformers.get(entry.getKey()).apply(entry.getValue())))
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
Ожидаемый результат: {A = 16, B = 10, C = 17}.
Есть ли более простой способ выражения "применить карту трансформаторов к отображению соответствия ввода данных по ключу" в API Java Streams?