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

Java如何获取Map中值元素数量最多的前3个键值对

问题说明

你原有代码的逻辑完全不符合需求:

  • 当前流处理的元素是Map.Entry<String, List<String>>类型,不存在Person类上下文,无法直接调用Person::getLastName
  • 需求不需要做分组聚合,核心逻辑是统计每个key对应value列表的长度、倒序排序、取Top3后格式化输出。
正确实现代码
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collectors;

// 业务代码位置
String store = lastByFirst.entrySet()
        .stream()
        // 映射为 [名字, 对应姓氏数量] 的键值对
        .map(entry -> Map.entry(entry.getKey(), entry.getValue().size()))
        // 按姓氏数量从大到小倒序排列
        .sorted(Comparator.comparingInt(Map.Entry<String, Integer>::getValue).reversed())
        // 取排名前3的条目
        .limit(3)
        // 按要求格式拼接单行内容
        .map(entry -> String.format("%s: %d", entry.getKey(), entry.getValue()))
        // 用换行符拼接所有行
        .collect(Collectors.joining("\n"));

如果你使用的JDK版本低于9,不支持Map.entry()静态方法,可以把映射部分的代码替换为new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue().size()),同时导入java.util.AbstractMap包即可。

针对你给出的测试数据,上述代码执行后store的输出完全匹配预期:

Simon: 4
George: 3
Toby: 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:01:13