You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Java Stream字符统计代码以生成指定格式的输出?

修正及优化方案

原代码存在两个核心问题:

  • 用System.out.println逐个打印键值对,导致结果分行显示,无法拼接成目标字符串
  • 所有字符的计数都会被输出,包括计数为1的情况,不符合"计数为1时不显示数字"的要求

下面是修正后的完整代码:

String input1 = "abbccd";
String result = input1.chars()
        .mapToObj(c -> Character.toLowerCase((char) c)) // 简化字符转小写的写法
        .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))
        .entrySet().stream()
        .map(entry -> {
            char key = entry.getKey();
            long count = entry.getValue();
            // 计数为1时只保留字符,否则拼接字符和计数
            return count == 1 ? String.valueOf(key) : key + String.valueOf(count);
        })
        .collect(Collectors.joining()); // 将所有片段拼接成一个字符串

System.out.println(result); // 输出:ab2c2d

关键优化点说明:

  • 简化字符处理:把Character.toLowerCase(Character.valueOf((char) s))改成Character.toLowerCase((char) c),直接对char类型转小写,避免多余的装箱操作
  • 替换输出逻辑:用map操作处理每个键值对,根据计数决定输出内容,再通过Collectors.joining()把所有片段拼接成完整字符串,替代原有的forEach逐个打印
  • 保留顺序:继续使用LinkedHashMap确保字符顺序和原字符串一致

内容的提问来源于stack exchange,提问作者sid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:24:40