Map<String, Integer>
があるとします。 Map<String, String>
を取得する簡単な方法はありますか?
簡単に言うと、私はこれが好きではないということです:
Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
mapped.put(key, originalMap.get(key).toString());
}
ただし、次のようなライナーがあります。
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
しかし、明らかにmapValues
メソッドはありません。
エントリをストリーミングして、新しいマップに収集する必要があります。
Map<String, String> result = map.entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, e -> String.valueOf(e.getValue()));
最も簡単な方法は次のとおりです。
Map<String, Integer> map = new HashMap<>();
Map<String, String> mapped = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
ここで行うことは:
Stream<Map.Entry<String, Integer>>
String.valueOf
。あなたがワンライナーでそれを行うことができない理由は、Map
インターフェイスがそのようなものを提供していないためです。あなたがそれに到達できる最も近いものはmap.replaceAll
、しかし、そのメソッドは、型が同じままであることを指示します。