グアバまたはStringUtilsを使用してJavaマップ値をカンマ区切りの文字列に変換する効果的な方法はありますか?
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
testMap を String -> "val1,val2" に変換する方法を探しています。
グアバまたはStringUtilsを使用してJavaマップ値をカンマ区切りの文字列に変換する効果的な方法はありますか?
Map<String, String> testMap = new HashMap<>();
testMap.put("key1", "val1");
testMap.put("key2", "val2");
testMap を String -> "val1,val2" に変換する方法を探しています。
グァバ: Joiner.on(',').join(map.values())
.
Java 1.8 では、これを実行できるjoin()メソッドが String クラスに追加されました。
すべての値を取得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: 必要に応じてs を削除し.replaceAll()
ます
Eclipse CollectionsmakeString()
で使用できます。
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 Collections タイプに変換できない場合は、 を使用できます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