4

すべての要素とキー値を文字列に結合するための簡単な関数はありますか

Map<String, String> m = new HashMap<String, String>();
m.put("lebron", "james");
m.put("kevin", "durant");

m.join(",") は次を生成する必要があります: "lebronjames,kevindurant"

マップを反復処理するのではなく、グアバまたは apache 共通 (StringUtils) Java ライブラリを使用して、より単純な (冗長性の低い) ソリューションを探しています

4

3 に答える 3

12

Googleグアバ ライブラリの使用:

Map<String, String> m = new HashMap<String, String>(); 
m.put("lebron", "james");
m.put("kevin", "durant");

Joiner.MapJoiner joiner = Joiner.on(",").withKeyValueSeparator("");
System.out.println(joiner.join(m));  // return lebronjames,kevindurant
于 2012-06-10T23:10:18.637 に答える
3
String mapString = m.toString();
String newStr = mapString.substring(1, mapString.length() - 1).replaceAll("=", "");

これは、 AbstractMap.toString()の動作に依存しています。私は、toString実装に頼ることがあまり快適ではありませんでした。

したがって、リストを反復することをお勧めします。実際、繰り返しも非常に簡単です。

for (String key : m.keySet())
   newStr += key + m.get(key) + ",";
newStr = newStr.substring(0, newStr.length() - 1);

好きなコードStringBufferで編集してください。StringBuilder

于 2012-06-10T22:56:45.043 に答える
0

Java 8 では、ConcurrentHashMap

ConcurrentHashMap<String, String> m = new ConcurrentHashMap<>();
m.put("lebron", "james");
m.put("kevin", "durant");

String result = m.reduce(1, (k, v) -> (k + v), (r1, r2) -> r1 + "," + r2);
于 2015-07-21T02:40:13.953 に答える