【发布时间】:2016-07-01 05:43:34
【问题描述】:
我想用':'将HashMap的键和值连接到一个字符串,并将它们转换成一个列表。
例子:
Map<String,String> tags = new HashMap<>();
tags.put("k1","v1");
tags.put("k2","v2");
那我想得到字符串
k1:v1,k2:v2
我的代码是:
private String transe(Map<String, String> tags) {
if (tags == null || tags.isEmpty()) {
return DEFAULT_STATUS_GROUP;
}
List<String> tagKVList = new ArrayList<>();
tags.forEach((key, value) -> tagKVList.add(String.join(":", key, value)));
tagKVList.sort((tag1, tag2) -> tag1.compareTo(tag2));
return tagKVList.stream().collect(Collectors.joining(","));
}
如何去掉局部变量tagKVList,让代码更清晰?
【问题讨论】:
-
Lambda 表达式是一个不错的功能,但您仍然不需要它们来指定多余的东西。
Strings 是Comparable,这就是他们有compareTo方法的原因,所以你不需要指定(tag1, tag2) -> tag1.compareTo(tag2)比较器。您可以使用tagKVList.sort(null)或者,如果您喜欢类型安全,请使用tagKVList.sort(Comparator.naturalOrder())。
标签: java string java-8 java-stream