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

如何用Java Stream按技能列表长度排序并找出技能最多的用户?

解决方案

报错原因

你之前的代码Comparator.comparing(User::skills)编译报错,是因为List<String>类没有实现Comparable接口,Java无法直接比较两个List实例的大小,必须基于技能列表的长度来构建比较逻辑。

实现方式

方式1:找到单个技能最多的用户(若有多个取第一个)

直接使用Stream的max()方法,结合基于技能数量的比较器,无需排序整个流,效率更高:

users.stream()
    .max(Comparator.comparingInt(user -> user.skills().size()))
    .ifPresent(user -> {
        System.out.println("姓名: " + user.name());
        System.out.println("技能列表: " + user.skills());
    });

运行结果会输出技能最多的用户信息:

姓名: Agnieszka
技能列表: [Java, Scala, Kotlin, Haskell, Clojure]

方式2:找出所有技能数量最多的用户(处理并列情况)

如果存在多个用户技能数量相同且都是最大值,可先算出最大技能数,再筛选符合条件的用户:

// 第一步:获取最大技能数量
int maxSkillCount = users.stream()
    .mapToInt(user -> user.skills().size())
    .max()
    .orElse(0);

// 第二步:筛选出所有技能数等于最大值的用户
users.stream()
    .filter(user -> user.skills().size() == maxSkillCount)
    .forEach(user -> {
        System.out.println("姓名: " + user.name());
        System.out.println("技能列表: " + user.skills());
        System.out.println("---");
    });

当前数据中只有Agnieszka符合条件,若有其他用户技能数也是5,会一并输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:10