如何访问地图的结尾元素?

时间:2014-07-14 12:03:40

标签: java

我有这个方法:

    public String nodePropertyGenerator(Map<String,Object> properties){
    String prop="";
    for(Map.Entry<String, Object> entry : properties.entrySet()) {
        prop += entry.getKey() + ":'" +entry.getValue()+"' ,";
        Iterator iterator = properties.entrySet().iterator(); 
    }
    return prop;
}

我想这个方法返回一个这样的字符串:

name:'hossein' , age:'24' , address:'khorram'

所以我想检查我的地图元素是否为结尾元素,它会删除&#34;,&#34;从字符串的结尾。怎么做。请帮我。感谢

3 个答案:

答案 0 :(得分:4)

一种方法是添加boolean变量,在进入循环之前将其设置为true,然后使用它来确定在添加下一个之前是否需要逗号组件,像这样:

boolean isFirst = true;
StringBuilder res = new StringBuilder();
for (Map.Entry<String, Object> entry : properties.entrySet()) {
    if (!isFirst) {
        res.append(", ");
    }
    isFirst = false;
    res.append(entry.getKey());
    res.append(":'");
    res.append(entry.getValue());
    res.append("'");
}

请注意,在循环中对不可变字符串使用连接运算符效率很低。您应该使用StringBuilder代替。

答案 1 :(得分:2)

您无法判断当前迭代是否是最后一次迭代。我建议您使用StringBuilder而不是重复的字符串连接,然后在最后修剪长度:

StringBuilder builder = new StringBuilder();
for (Map.Entry<String, Object> entry : properties.entrySet()) {
    builder.append(entry.getKey())
           .append(":'")
           .append(entry.getValue())
           .append("' ,");
}
if (builder.length() > 0) {
    builder.setLength(builder.length() - 2);
}
return builder.toString();

答案 2 :(得分:2)

Java 8有一个类来执行此操作:java.util.StringJoiner

您可以这样使用它:

StringJoiner stringJoiner = new StringJoiner("' ,");
for(Map.Entry<String, Object> entry : properties.entrySet()) {
    stringJoiner.add(entry.getKey() + ":'" +entry.getValue());
}
return stringJoiner.toString();

或者您可以使用Stream执行此操作:

return properties.entrySet().stream()
                 .map(entry -> entry.getKey() + ":'" +entry.getValue())
                 .collect(Collectors.joining("' ,"));