【发布时间】:2020-01-08 12:07:24
【问题描述】:
我已经看过this questions,但我的问题有点不同。
我有一个“baseString”、n HashMap 和一个输出字符串。 我想用hashmap填充baseString,构造一个json调用参数。
我已经用 Java 7 做到了,用这种方式:
HashMap<String,Integer> element= getAllElement();
String baseElem="{\"index\":{}}\r\n" +
"{\"name\":\"$name$\",\"age\":$age$}";
String result=baseElem;
for (Map.Entry<String, Integer> entry : element.entrySet()) {
result=result.replace("$name$", entry.getKey());
result=result.replace("$age$", entry.getValue().toString());
result=result+baseElem;
}
result= result.replace(baseElem, "");
现在我想对 Java 8 也一样, 我试过这样:
element.forEach((k,v)->{
result=result.replaceAll("$name$", k);
result=result.replaceAll("$age$", v.toString());
result=result+baseElem;
});
但是对于每个结果我都有一个错误
"在封闭范围内定义的局部变量结果必须是最终的或 有效地最终”
所以问题是:我可以用 Java 8 和流以某种方式做到这一点吗?或者没有办法,所以我可以使用简单的Java 7 for?
【问题讨论】:
-
将变量定义为类变量,而不是在方法内部定义。
-
这不是在 Java 中做 JSON 的正确方法,您应该使用 Jackson 将 Java 对象转换为 JSON 并将 JSON 转换为 Java 对象。如果你坚持使用模板,还有freemarker、mustache、thymeleaf、...等更好的解决方案。
-
请注意,
replaceAll需要一个正则表达式,而$是一个表示输入结束边界的特殊字符。它只能匹配输入字符串的结尾,所以$name$和$age$永远不会匹配。 -
@NyamiouTheGaleanthrope 感谢您的建议,我正在尝试所有可能的解决方案和实施。
标签: java for-loop java-8 java-stream