web-dev-qa-db-ja.com

Java値をコンマ区切り文字列にマップ

GuavaまたはStringUtilsを使用してJavaマップ値をコンマ区切りの文字列に変換する効果的な方法はありますか?

Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");

testMapを文字列に変換する方法を探しています-> "val1、val2"。

11
l a s

Java 8+(Guava、StringUtils、またはその他の外部ライブラリは必要ありません)でそれを行う方法は次のとおりです。

testMap.values().stream().map(Object::toString).collect(Collectors.joining(","));
22
lreeder

グアバ:Joiner.on(',').join(map.values())

9
Louis Wasserman

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
5
Syam Elakapalli

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"

挿入順序を維持するために、HashMapLinkedHashMapに変更しました。

4
ssssteffff

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を削除します

2
everton

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コレクションのコミッターです。

1
Craig P. Motlin

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

0
Ankit Lalan