4

是否有一个简单的函数用于将所有元素和键值连接到字符串

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

m.join(",") 应该产生:"lebronjames,kevindurant"

我正在寻找使用 guava 或 apache common (StringUtils) Java libs 的更简单(不那么冗长)的解决方案,而不是遍历地图

4

3 回答 3

12

使用谷歌番石榴库

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 回答