GuavaまたはStringUtilsを使用してJavaマップ値をコンマ区切りの文字列に変換する効果的な方法はありますか?
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
testMapを文字列に変換する方法を探しています-> "val1、val2"。
Java 8+(Guava、StringUtils、またはその他の外部ライブラリは必要ありません)でそれを行う方法は次のとおりです。
testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));
グアバ:Joiner.on(',').join(map.values())
。
Java 1.8では、これを実行できるStringクラスに join() メソッドが追加されました。
また、Map
にはすべての値を取得するための関数values()
があります。 map.values()は文字列型なので、String.joinに渡すだけです。例:
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String valueString = String.join(",",map.values()); //val1,val2
StringUtils
を使用できます:
final Map<String, String> testMap = new LinkedHashMap<String, String>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String csv = StringUtils.join(testMap.values(), ',')); // "val1,val2"
注挿入順序を維持するために、HashMap
をLinkedHashMap
に変更しました。
OK、これがあなたがこのようなものが欲しい場合の私の推測です(あなたの質問には明確化がありません)。これは、GuavaまたはStringUtilsなしで実行されます。
_Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 2);
map.put(3, 4);
System.out.println(map.toString());
_
出力:
_{1=2, 3=4}
_
values
をコンマ区切りのリストとして表示する場合は、次を使用できます。
_System.out.println(map.values().toString());
_
出力:
_[2, 4]
_
PS:必要に応じて、.replaceAll()
で_[]
_ sを削除します
Eclipseコレクション でmakeString()
を使用できます。
MutableMap<String, String> testMap = new UnifiedMap<String, String>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
String commaAndSpace = testMap.makeString();
Assert.assertTrue(commaAndSpace.equals("val1, val2")
|| commaAndSpace.equals("val2, val1"));
String comma = testMap.makeString(",");
Assert.assertTrue(comma.equals("val1,val2")
|| comma.equals("val2,val1"));
Map
をEclipseコレクションタイプに変換できない場合は、MapAdapter
を使用できます。
MapAdapter.adapt(testMap).makeString();
注:私はEclipseコレクションのコミッターです。
Spring MVCを使用している場合は、これでうまくいく可能性があります。
import org.springframework.util.StringUtils;
Map<String, String> groups = //List of Maps
List<String> targetList = new ArrayList<String>(groups).values());
String csv = StringUtils.arrayToCommaDelimitedString(targetList.toArray());
出力:abc、def、ghi