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

如何用Java Streams找出给定Map输入中的重复字符

使用Java Stream找出Map中每个字符串的重复字符

问题描述

给定以下Java Map:

Map<Integer,String> res1 = new HashMap<>();
res1.put(1, "NaaveeKKn");
res1.put(2, "lavanayana");

需要通过Stream流处理,提取每个字符串中的重复字符,得到预期输出:[[a,e,K],[a,n]]。

解决方案

核心逻辑是对Map中的每个字符串单独处理:通过分组统计字符出现次数,筛选出重复字符后收集为列表,最后汇总所有结果。

完整代码实现

import java.util.*;
import java.util.stream.Collectors;

public class DuplicateCharExtractor {
    public static void main(String[] args) {
        Map<Integer,String> res1 = new HashMap<>();
        res1.put(1, "NaaveeKKn");
        res1.put(2, "lavanayana");

        List<List<Character>> duplicateCharsList = res1.values().stream()
                // 处理每个字符串
                .map(str -> str.chars()
                        // 将int类型的字符码转换为Character对象
                        .mapToObj(c -> (char) c)
                        // 按字符分组,统计出现次数
                        .collect(Collectors.groupingBy(Character::charValue, Collectors.counting()))
                        // 筛选出现次数≥2的字符
                        .entrySet().stream()
                        .filter(entry -> entry.getValue() >= 2)
                        .map(Map.Entry::getKey)
                        // 收集为单个字符串的重复字符列表
                        .collect(Collectors.toList()))
                // 收集所有字符串的结果为最终列表
                .collect(Collectors.toList());

        System.out.println(duplicateCharsList); // 输出:[[a, e, K], [a, n]]
    }
}

代码关键点说明

  • res1.values().stream():遍历Map中所有的字符串值,开启Stream处理
  • str.chars().mapToObj(c -> (char) c):将字符串拆分为字符流,注意chars()返回的是Unicode码的int值,需要转换为Character对象
  • Collectors.groupingBy(Character::charValue, Collectors.counting()):按字符本身分组,统计每个字符的出现次数,得到Map<Character, Long>
  • filter(entry -> entry.getValue() >= 2):过滤出出现次数≥2的字符,即重复字符
  • 两层collect(Collectors.toList()):先将单个字符串的重复字符收集为列表,再将所有列表汇总成最终结果

可选扩展:忽略大小写

如果需要忽略大小写(比如把N和n视为同一个字符),可以修改分组的key为统一大小写:

.collect(Collectors.groupingBy(c -> Character.toLowerCase(c), Collectors.counting()))

此时第一个字符串的重复字符会变为[a, e, k, n],可根据需求选择是否启用。

内容的提问来源于stack exchange,提问作者M.NAVEEN KUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:54:26