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

使用Stream API统计字符串字符出现次数(需排除空格)

Java Stream API统计字符串字母出现次数(排除空格)

问题场景

现有一段使用Java Stream API统计字符串字符出现次数的代码,但统计结果包含了空格的次数,需要修改代码仅统计字母的出现次数。

原代码

import java.util.Map;
import java.util.stream.Collectors;

public class FindOccurenceOfChars {

    public static void main(String[] args) {

        String name = "Ranjan Kumar Singh";
        Map<Object, Long> repetedChars = name.chars()
               .mapToObj(c -> (char) c)
               .collect(Collectors.toList()).stream()
               .map(u -> u.toUpperCase(u))
               .collect(Collectors.groupingBy(l -> l, 
                Collectors.counting()));
        
        System.out.println("Repeated characters are..." + repetedChars);
    }
}

当前输出

{ =2, A=3, R=2, S=1, U=1, G=1, H=1, I=1, J=1, K=1, M=1, N=3}

期望输出

{A=3, R=2, S=1, U=1, G=1, H=1, I=1, J=1, K=1, M=1, N=3}

修改后的代码

import java.util.Map;
import java.util.stream.Collectors;

public class FindOccurenceOfChars {

    public static void main(String[] args) {

        String name = "Ranjan Kumar Singh";
        Map<Character, Long> repeatedChars = name.chars()
                .mapToObj(c -> (char) c)
                // 过滤掉空格字符
                .filter(c -> c != ' ')
                .map(Character::toUpperCase)
                .collect(Collectors.groupingBy(c -> c, Collectors.counting()));
        
        System.out.println("Repeated characters are..." + repeatedChars);
    }
}

关键修改点

  • 添加filter(c -> c != ' '):直接过滤掉空格字符,避免后续统计
  • 移除冗余的collect(Collectors.toList()).stream():原代码中转List再重新开Stream的操作毫无必要,直接链式调用Stream方法更高效
  • 修正泛型类型:将Map<Object, Long>改为Map<Character, Long>,让键的类型更明确,符合类型规范
  • 简化映射逻辑:将u -> u.toUpperCase(u)替换为方法引用Character::toUpperCase,代码更简洁

修改后输出

{A=3, R=2, S=1, U=1, G=1, H=1, I=1, J=1, K=1, M=1, N=3}

内容的提问来源于stack exchange,提问作者ranjan kumar singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:35:07