使用lambda表达式将hashmap保存到String

时间:2015-10-24 08:18:48

标签: java lambda hashmap java-8

我正在尝试将以下代码的输出保存在名为" 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();
            });

2 个答案:

答案 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());
        });