Помогите разобраться плиз.
Есть мапа Map: {params={par1=1, par2=name}}, значение тоже подразумевает тип Map.
Как можно при помощи stream конвертировать значение данной мапы в новую мапу, чтобы получилось {par1=1, par2=name} ?
попытался сделать что-то такое
Map<String, Object> parameters = params.entrySet().stream()
.filter(k -> k.getKey().equals("params"))
.collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue()));
Но все равно итог такой получаю {params={par1=1, par2=name}}
Пробовал продолжать, вызывая снова stream и добавляя map(String::split) например, не получается, в итоге не работает
Следите за тем, что находится в вашем стриме. После filter у вас всё ещё стрим, состоящий из Map.Entry исходного Map'а. Чтобы перейти к стриму из элементов вложенного Map'а, нужно его извлечь:
Map<String, Object> parameters = params.entrySet().stream()
// Сейчас в стриме [Map.Entry(key=params, value={par1=1, par2=name})]
.filter(k -> k.getKey().equals("params"))
// В стриме всё ещё [Map.Entry(key=params, value={par1=1, par2=name})]
.map(Map.Entry::getValue)
// Сейчас в стриме [Map {par1=1, par2=name}]
.flatMap(m -> m.entrySet().stream())
// А теперь стриме [Map.Entry(key=par1, value=1}), Map.Entry(key=par2, value=name)]
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Только совершенно непонятно, зачем делаь всё это через стримы. Если вы знаете, что значения исходного Map'а - это Map'ы, и вы точно знаете, что вам нужен Map, лежащий под ключом "params", то почему бы просто его не достать?
Map<String, Object> parameters = params.get("params");
Если исходный Map имеет тип Map<String, Object>, но вы точно знаете, что значения - это тоже Map - просто сделайте явное приведение типов.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости