17

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

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

testMap を String -> "val1,val2" に変換する方法を探しています。

4

7 に答える 7

11

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

于 2013-12-26T17:30:16.907 に答える
9

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
于 2016-10-13T07:32:51.967 に答える
5

使用できます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

于 2013-12-26T16:40:29.650 に答える
2

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()ます

于 2013-12-26T16:38:37.280 に答える
1

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

于 2013-12-26T18:48:12.873 に答える
0

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

于 2016-04-26T10:48:02.213 に答える