使用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
相关产品推荐
相关产品推荐

