以下のコードスニペットはmultiValueマップを受け入れ、マップに変換します。今度は、マップを使用して、ストリームを使用して値リストを持つマップを返します。
public static Map<String, String> decodeMap(MultiValueMap<String, String> multi) {
if (CollectionUtils.isEmpty(multi)) {
return Map.of();
}
Map<String, String> map = new HashMap<>(multi.entrySet().size());
for (Map.Entry<String, List<String>> entry : multi.entrySet()) {
StringBuilder sb = new StringBuilder();
for (String s : entry.getValue()) {
if (sb.length() > 0) {
sb.append(',');
}
sb.append(s);
}
map.put(entry.getKey(), sb.toString());
}
return map;
}
これは私が試したものですが、うまくいきません:
Map<String, List<Long>> map = multi.entrySet().stream()
.filter(f -> multi.containsKey("employee"))
.collect(Collectors.toMap(Entry ::getKey,Collectors.mapping(e -> Long.parseLong(e.getValue()), Collectors.toList())));
前もって感謝します!
変換する MultiValueMap<String, String>
からMap<String, List<Long>>
、すべてのMultiValueMap
値が数値文字列であると仮定します。
Map<String, List<Long>> map =
multi.entrySet().stream()
.filter(f -> multi.containsKey("employee"))
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().stream().map(Long::parseLong).collect(Collectors.toList())));
Map<String, List<Long>> map = multi.entrySet().stream()
.filter(f -> multi.containsKey("employee"))
.flatMap(e->e.getValue().stream()
.map(v->new AbstractMap.SimpleImmutableEntry<>(e.getKey(), v)))
.collect(Collectors.toMap(Map.Entry ::getKey,Collectors.mapping(e -> e.getValue(), Collectors.toList())));