Java 如何访问映射的结束元素?

Java 如何访问映射的结束元素?,java,Java,我有这个方法: public String nodePropertyGenerator(Map<String,Object> properties){ String prop=""; for(Map.Entry<String, Object> entry : properties.entrySet()) { prop += entry.getKey() + ":'" +entry.getValue()+"' ,";

我有这个方法:

    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;
}

所以我想检查我的映射元素是否是end元素,它从字符串的末尾删除“,”。如何做到这一点。请帮帮我。感谢

一种方法是添加一个
boolean
变量,在进入循环之前将其设置为
true
,并使用它在添加下一个组件之前确定是否需要逗号,如下所示:

name:'hossein' , age:'24' , address:'khorram'
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("'");
}
StringJoiner stringJoiner = new StringJoiner("' ,");
for(Map.Entry<String, Object> entry : properties.entrySet()) {
    stringJoiner.add(entry.getKey() + ":'" +entry.getValue());
}
return stringJoiner.toString();
boolean isFirst=true;
StringBuilder res=新的StringBuilder();
对于(Map.Entry:properties.entrySet()){
如果(!isFirst){
决议附件(“,”);
}
isFirst=false;
res.append(entry.getKey());
res.append(“:”);
res.append(entry.getValue());
决议附加(“”);
}

请注意,对循环中的不可变字符串使用串联运算符效率低下。您应该改用
StringBuilder

您无法判断当前迭代是否是最后一次迭代。我建议您使用
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();
StringBuilder=新建StringBuilder();
对于(Map.Entry:properties.entrySet()){
builder.append(entry.getKey())
.append(“:”)
.append(entry.getValue())
.附加(“,”);
}
如果(builder.length()>0){
builder.setLength(builder.length()-2);
}
返回builder.toString();

Java 8有一个类来实现这一点:

您可以这样使用它:

name:'hossein' , age:'24' , address:'khorram'
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("'");
}
StringJoiner stringJoiner = new StringJoiner("' ,");
for(Map.Entry<String, Object> entry : properties.entrySet()) {
    stringJoiner.add(entry.getKey() + ":'" +entry.getValue());
}
return stringJoiner.toString();

触摸更快。:)+1应该是
builder.length()-2
?@tobias\u k:哎呀,是的,对不起。修复。
返回prop.replaceAll(“,$”,”)??[参考这一条,这可能会解决您的问题][1][1]:它成功了。谢谢我的朋友。我很高兴你的帮助。祝你好运