我正在尝试将以下代码的输出保存在名为" output"的字符串变量中。但是,我得到了这个编译错误"在封闭范围内定义的局部变量输出必须是最终的或有效的最终"。我确实尝试将输出变量声明为final,但我得到另一个编译错误"无法分配最终的局部变量输出。它必须是空白的,不能使用复合赋值"有什么建议吗?
String output = "";
map.entrySet().stream().sorted(
Map.Entry.<String, Integer> comparingByValue()
.reversed()
.thenComparing(Map.Entry.comparingByKey()))
.forEach(entry -> {
output += entry.getKey() + " - " + entry.getValue();
});
答案 0 :(得分:6)
有一个收藏家:joining()
。
String output = map.entrySet().stream()
.sorted(Map.Entry.<String, Integer> comparingByValue()
.reversed()
.thenComparing(Map.Entry.comparingByKey())
)
.map(entry -> entry.getKey() + " - " + entry.getValue())
.collect(joining());
您还可以添加分隔符:joining(", ")
。
答案 1 :(得分:4)
您无法在lambda表达式中为局部变量分配新值(当您在+=
output
上使用String
运算符时会发生这种情况。但是,您可以将String
切换为StringBuilder
:
StringBuilder output = new StringBuilder();
map.entrySet().stream().sorted(
Map.Entry.<String, Integer> comparingByValue()
.reversed()
.thenComparing(Map.Entry.comparingByKey()))
.forEach(entry -> {
output.append(entry.getKey() + " - " + entry.getValue());
});