У меня есть JSON с такой структурой:
{
"template": "notifyChangeClaimState",
"data": {
"claimUid": "111-222-333",
"attachments": [
{
"name": "Shana.jpg",
"type": "jpg",
"payload": "base-64 encoding"
}
]
}
}
который я отображаю на HashMap
(не дженерик). Этот HashMap
находится в DTO-класе. Мне нужно трансформировать эту мапу в другую мапу так, чтобы она не содержала поле attachments
. То есть результат должен быть таким:
{
"template": "notifyChangeClaimState",
"data": {
"claimUid": "111-222-333"
}
}
Я пытаюсь проделать конвертацию при помощи стримов:
Map<String, String> content = data.entrySet().stream()
.filter(entry -> !"attachments".equals(entry.getKey()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));
но такой код не компилируется:
Error:(27, 25) java: incompatible types: inference variable R has incompatible bounds
equality constraints: java.util.Map<K,U>
lower bounds: java.util.HashMap<java.lang.String,java.lang.String>,java.lang.Object
а строки Map.Entry::getKey
помечены как ошибка.
Как исправить этот код, чтобы он заработал?
Map<String, String> result = (Map<String, String>)data.keySet().stream()
.filter(key -> !"attachments".equals(key))
.collect(Collectors.toMap(k->k, v->data.get(v)));
Отфильтровываем ненужное и собираем с привидением типов Map<Object, Object> -> Map<String, String>
Map<String, String> content = data.entrySet()
.stream()
.filter(entry -> !"attachments".equals(entry.getKey()))
.collect(Collectors.toMap(
e -> e.getKey().toString(),
e -> e.getValue().toString()
));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть клиент-серверное приложениеСерверная часть написана на Spring boot
Java ДженерикиРастолкуйте объявление для чайников, сигнатуру объявления что делает ? super T читаю, не особо могу вникнуть