You need to enable JavaScript to run this app. 如何按分类内最小eventOrder排序Event列表,可否用Comparator实现
优惠活动
大模型
产品
解决方案
定价
更多

如何按分类内最小eventOrder排序Event列表,可否用Comparator实现

解决方案

可以通过自定义Comparator实现该需求,具体实现步骤如下:

步骤1:预处理获取各分类的最小eventOrder

首先遍历一次所有Event对象,构建分类ID和对应分类下最小eventOrder的映射表(需先给Event类添加属性对应的getter方法):

Map<Integer, Integer> categoryMinOrderMap = events.stream()
    .collect(Collectors.toMap(
        Event::getCategoryId,
        Event::getEventOrder,
        Integer::min // 同一个分类保留最小的eventOrder
    ));

步骤2:自定义Comparator排序

基于上述映射表实现排序规则:

events.sort((e1, e2) -> {
    // 第一排序规则:按所属分类的最小eventOrder升序排列
    int categoryOrderDiff = Integer.compare(
        categoryMinOrderMap.get(e1.getCategoryId()),
        categoryMinOrderMap.get(e2.getCategoryId())
    );
    if (categoryOrderDiff != 0) {
        return categoryOrderDiff;
    }
    // 第二排序规则:同分类内按自身eventOrder升序排列
    return Integer.compare(e1.getEventOrder(), e2.getEventOrder());
});

逻辑说明

该实现完全匹配你的需求:每个分类整体的排序优先级由分类下最早出现(eventOrder最小)的事件决定,保证了eventOrder更小的事件对应的分类整体靠前,同时同分类的事件连续排列、内部按eventOrder升序。用你提供的测试数据运行上述代码,输出结果和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:06:07