如何使用Streams将HashMap转换为Java 8中的K/V-String

Joe*_*oel 7 java hashmap java-8 java-stream

我想尽快创建一个我的键值对的字符串HashMap<String, String> m.

我试过了:

StringBuffer buf = new StringBuffer();
buf.append("[");
for (String key : m.keySet()) {
   buf.append(key);
   buf.append("=");
   buf.append(m.get(key));
   buf.append(";");
}
buf.append("]");
Run Code Online (Sandbox Code Playgroud)

用Java8我试过:

m.entrySet().stream()
            .map(entry -> entry.getKey() + " = " + entry.getValue())
            .collect(Collectors.joining("; " , "[" , "]"));
Run Code Online (Sandbox Code Playgroud)

有更快,更好的代码吗?在地图函数中附加键和值似乎代价很高,不是吗?

gde*_*ohn 8

map -> map.entrySet().stream().map(Entry::toString).collect(joining(";", "[", "]"))
Run Code Online (Sandbox Code Playgroud)

(注意我省略了导入.)

Luiggi Mendoza说:

在这种情况下,我不担心性能,除非它是系统的关键部分,并且它被指出是使用分析器或类似工具的瓶颈.如果您之前没有这样做,并且您认为此代码不是最佳的,那么我可能你错了,应该先测试一下.

  • OP的'Collectors.joining()'调用具有分隔符,前缀,后缀错误.你的解决方案修复了. (3认同)
  • 请注意,虽然`Entry.toString()`通常返回`key = value`,但[Entry]并未明确要求它(http://docs.oracle.com/javase/7/docs/api/java/util/ Map.Entry.html)接口,因此您可以点击返回其他内容的地图实现.我更喜欢在问题中明确连接. (3认同)