java比较器对模型数组和另一个字段进行排序

问题描述 投票:0回答:1

我有一堂java课.. 公共类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;
                }

我的要求是使用模型字符串数组 reqRejects 对此responseMessage对象数组进行排序,然后使用ruleSeqNo(升序)

例如。 输入对象数组

留言 拒绝代码 规则序列号 续工业
abcd 60 101
cdef 40 300
xyz 41 280
133 41 270
56f 40 275
677 60 102
hfdd A5 400

模型字符串数组

拒绝代码
A5
40
60
41

响应消息对象数组具有拒绝代码列。而reqRejects字符串数组(拒绝代码)就是模型数组。因此,基本上,需要首先按照与拒绝代码模型字符串数组列出的顺序相同的顺序在拒绝代码列上对对象数组进行排序。然后是规则序列号。

输出排序后的对象数组应该是

留言 拒绝代码 规则序列号 续工业
hfdd A5 400
56f 40 275
cdef 40 300
abcd 60 101
677 60 102
133 41 270
xyz 41 280

目前我已经完成了比较器,如下所示,它仅对序列号进行排序

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

思考如何添加基于模型字符串数组的排序。

java arrays sorting comparator
1个回答
0
投票

你可以这样做。

List<String> recRejects = List.of("A5", "40", "60", "41");

List<ResponseMessage> list = new ArrayList<>(
        List.of(new ResponseMessage("abcd", "60", 101, "Y"),
                new ResponseMessage("cdef", "40", 300, "Y"),
                new ResponseMessage("xyz", "41", 280, "Y"),
                new ResponseMessage("133", "41", 270, "Y"),
                new ResponseMessage("56f", "40", 275, "Y"),
                new ResponseMessage("677", "60", 102, "Y"),
                new ResponseMessage("hfdd", "A5", 400, "Y")));

list.sort(Comparator
        .<ResponseMessage>comparingInt(msg -> recRejects.indexOf(msg.getRejectCode()))
        .thenComparing(ResponseMessage::getRuleSeqNo));

list.forEach(System.out::println);

打印

      hfdd         A5        400          Y
       56f         40        275          Y
      cdef         40        300          Y
      abcd         60        101          Y
       677         60        102          Y
       133         41        270          Y
       xyz         41        280          Y
  • 使用
    Comparator.comparingInt
    对拒绝代码指定顺序的索引进行排序。
  • 使用
    Comparator.thenComparing
    对下一个字段进行排序。
© www.soinside.com 2019 - 2024. All rights reserved.