Evg*_*nik -1 java hash dictionary flatten java-8
我有一个嵌套HashMap在这种形式:
{key1=val1, key2=val2,
key3=[
{key4=val4, key5=val5},
{key6=val6, key7=val7}
]
}
Run Code Online (Sandbox Code Playgroud)
我现在想展平该地图,以便所有条目都在同一级别:
{key1=val1, key2=val2, key4=val4, key5=val5,key6=val6, key7=val7}
Run Code Online (Sandbox Code Playgroud)
当我尝试
map.values().forEach(map.get("key3")::addAll);
Run Code Online (Sandbox Code Playgroud)
如本文所述,我收到以下错误:
invalid method reference
cannot find symbol
symbol: method addAll(T)
location: class Object
where T is a type-variable:
T extends Object declared in interface Iterable
Run Code Online (Sandbox Code Playgroud)
有没有通用的方法来展平任何给定的Map?
不确定我是否正确理解了这个问题,但这样的事情可能会奏效。还没有检查所有的语法,所以某处可能有一些错误。
Stream<Map.Entry<String, String>> flatten(Map<String, Object> map) {
return map.entrySet()
.stream()
.flatMap(this::extractValue);
}
Stream<Map.Entry<String, String>> extractValue(Map.Entry<String, Object> entry) {
if (entry.getValue() instanceof String) {
return Stream.of(new AbstractMap.SimpleEntry(entry.getKey(), (String) entry.getValue()));
} else if (entry.getValue() instanceof Map) {
return flatten((Map<String, Object>) entry.getValue());
}
}
Run Code Online (Sandbox Code Playgroud)
那么你可以这样做:
Map<String, String> flattenedMap = flatten(yourmap)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6446 次 |
| 最近记录: |