Я думаю, что ваш вопрос заключается в том, чтобы выделить какой-то фрагмент кода больше, чем преобразовать традиционные циклы for
в потоковые конструкции.
Предположим, у вас есть следующий универсальный служебный метод:
public static <K, V, M extends Map<K, V>> M fillMap(
Supplier<List<K>> keysFactory,
Supplier<V> singleValueFactory,
Supplier<M> mapFactory) {
M map = mapFactory.get();
List<K> keys = keysFactory.get();
V singleValue = singleValueFactory.get();
keys.forEach(k -> map.put(k, singleValue));
return map;
}
Тогда вы можете использовать описанный выше метод следующим образом:
Map<String, Integer> myMap = fillMap(() -> getKeysFromAnotherFunction(),
() -> getValueToBeInserted(),
HashMap::new); // create HashMap
myMap = fillMap(() -> getNextSetOfKeys(),
() -> getValueToBeInserted(),
() -> myMap); // use previously created map
Существуют варианты для приведенного выше кода, то есть метод может получить экземпляр Map<K, V>
вместо Supplier<Map<K, V>>
, или он может быть даже перегружен для поддержки обоих вариантов.