如何基于指定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列表进行两级排序:
- 优先遵循
reqRejects数组中指定的Reject Code顺序排序 - 当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
相关产品推荐
相关产品推荐

