You need to enable JavaScript to run this app. 如何通过Java Stream API从Integer列表中获取前5个最大值
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java Stream API从Integer列表中获取前5个最大值

前5个最大值的Java Stream实现方案

你之前调用的lst.stream().max(Integer::compare).get()是Stream的单值终端操作,仅能返回流中排序后的单个最大值,无法批量返回TopN结果。要实现获取前5个最大值的需求,按照标准流处理流程即可完成:

  • 核心逻辑拆解
    • 将流内元素按数值从大到小做逆序排序
    • 截取排序结果的前5个元素
    • 将截取到的元素收集为目标列表
  • 完整实现代码
// 需导入的依赖类
// import java.util.ArrayList;
// import java.util.Comparator;
// import java.util.List;
// import java.util.stream.Collectors;

// 初始化给定的Integer列表
List<Integer> lst = new ArrayList<>();
lst.add(10);
lst.add(15);
lst.add(16);
lst.add(8);
lst.add(100);
lst.add(1);
lst.add(40);

// 计算获取前5个最大值
List<Integer> top5Max = lst.stream()
        // 按Integer数值降序排列
        .sorted(Comparator.reverseOrder())
        // 截取前5个元素
        .limit(5)
        .collect(Collectors.toList());
  • 运行结果校验
    执行上述代码后,top5Max的实际值为[100, 40, 16, 15, 10],和预期的返回结果完全匹配。

补充说明

  • 若列表元素总数不足5个,limit(5)不会抛出异常,会直接返回排序后的全量元素
  • 列表内的重复元素会正常参与排序和截取,符合通用排序规则
  • 对于小数据量场景(如示例中的7个元素),该实现的可读性远高于自定义收集器的写法,维护成本更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 11:24:02