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

如何基于指定Reject Code顺序和Rule Seq No对Java对象列表排序

问题描述

Java类定义

public class response_message {

    private String message;
    private String rejectCode;
    private int ruleSeqNo;
    private String contInd;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getRejectCode() {
        return rejectCode;
    }

    public void setRejectCode(String rejectCode) {
        this.rejectCode = rejectCode;
    }

    public int getRuleSeqNo() {
        return ruleSeqNo;
    }

    public void setRuleSeqNo(int ruleSeqNo) {
        this.ruleSeqNo = ruleSeqNo;
    }

    public String getContInd() {
        return contInd;
    }

    public void setContInd(String contInd) {
        this.contInd = contInd;
    }

}

相关列表与数组定义

private List<response_message> responseMessage = new ArrayList<response_message>();

private String[] reqRejects;

public String[] getReqRejects() {
    return this.reqRejects;
}

public void setReqRejects(String[] reqRejects) {
    this.reqRejects = reqRejects;
}

需求说明

需要对responseMessage列表进行两级排序:

  1. 优先遵循reqRejects数组中指定的Reject Code顺序排序
  2. 当Reject Code相同时,再按ruleSeqNo字段升序排序

示例:若reqRejects数组指定顺序为[A5,40,60,41],排序后Reject Code为A5的元素排在最前,接着是40、60、41;同一Reject Code下的元素,按ruleSeqNo从小到大排列。

现有代码

目前仅实现了按ruleSeqNo升序排序的逻辑:

responseMessage.sort(Comparator.comparingInt(m -> m.getRuleSeqNo()));

解决方案

要实现两级排序,先将reqRejects数组转为映射存储每个Reject Code的优先级索引,再通过Comparator的thenComparing方法组合排序规则。

具体实现代码

// 把reqRejects数组转为映射,key是RejectCode,value是对应的优先级索引
Map<String, Integer> rejectCodePriority = new HashMap<>();
for (int i = 0; i < reqRejects.length; i++) {
    rejectCodePriority.put(reqRejects[i], i);
}

// 组合排序规则:先按RejectCode的优先级排序,再按ruleSeqNo升序
responseMessage.sort(Comparator.comparingInt((response_message m) -> 
                rejectCodePriority.getOrDefault(m.getRejectCode(), Integer.MAX_VALUE))
        .thenComparingInt(response_message::getRuleSeqNo));

代码说明

  • rejectCodePriority映射:存储数组中每个Reject Code对应的下标,下标越小排序优先级越高
  • comparingInt部分:通过getOrDefault获取元素Reject Code的优先级索引,若元素的Reject Code不在reqRejects数组中,默认给Integer.MAX_VALUE,让这类元素排在最后
  • thenComparingInt:在Reject Code优先级相同的情况下,再按ruleSeqNo升序排列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:51:02