滴滴撕滴颩 2023-01-31 09:56 采纳率: 57.1%
浏览 52
已结题

两个字符串数组对象需要进行比较是否相等,怎么把两个字符串对象保持顺序一致进行比较?

两个字符串数组对象需要进行比较是否相等,怎么把两个字符串对象保持顺序一致进行比较?

A字符串对象:

[
    {
        "Field":"id",
        "Type":"int(11)",
        "Null":"NO",
        "Extra":"auto_increment",
        "Key":"PRI"
    },
    {
        "Field":"app_id",
        "Type":"varchar(8)",
        "Null":"YES",
        "Extra":"",
        "Key":""
    }
]

B字符串对象:

[
    {
        "Field":"id",
        "Type":"int(11)",
        "Null":"NO",
        "Key":"PRI",
        "Extra":"auto_increment"
    },
    {
        "Field":"app_id",
        "Type":"varchar(8)",
        "Null":"YES",
        "Key":"",
        "Extra":""
    }
]

A字符串对象和B字符串对象的Key和Extra键值顺序不一样,不能直接比较,怎么实现B的顺序和A的一样呢?

img

img

  • 写回答

5条回答 默认 最新

  • CL有毒 2023-01-31 11:26
    关注

    如果是希望最终比较字符串,可以先处理一下原字符串:重新按照一定规则排列对象的key,比如题主前面说的:

    要实现的效果就是将A和B的所有键都按字母顺序排序一遍,怎么实现?

    核心原理就是用TreeMap保证对象的key按照字典升序排列

    import com.alibaba.fastjson2.JSON;
    import com.alibaba.fastjson2.JSONArray;
    import com.alibaba.fastjson2.JSONObject;
    import com.alibaba.fastjson2.JSONWriter;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.TreeMap;
    
    public class Main {
    
        public static void main(String[] args) {
            String A = "[\n" +
                    "    {\n" +
                    "        \"Field\":\"id\",\n" +
                    "        \"Type\":\"int(11)\",\n" +
                    "        \"Null\":\"NO\",\n" +
                    "        \"Extra\":\"auto_increment\",\n" +
                    "        \"Key\":\"PRI\"\n" +
                    "    },\n" +
                    "    {\n" +
                    "        \"Field\":\"app_id\",\n" +
                    "        \"Type\":\"varchar(8)\",\n" +
                    "        \"Null\":\"YES\",\n" +
                    "        \"Extra\":\"\",\n" +
                    "        \"Key\":\"\"\n" +
                    "    }\n" +
                    "]";
            String B = "[\n" +
                    "    {\n" +
                    "        \"Field\":\"id\",\n" +
                    "        \"Type\":\"int(11)\",\n" +
                    "        \"Null\":\"NO\",\n" +
                    "        \"Key\":\"PRI\",\n" +
                    "        \"Extra\":\"auto_increment\"\n" +
                    "    },\n" +
                    "    {\n" +
                    "        \"Field\":\"app_id\",\n" +
                    "        \"Type\":\"varchar(8)\",\n" +
                    "        \"Null\":\"YES\",\n" +
                    "        \"Key\":\"\",\n" +
                    "        \"Extra\":\"\"\n" +
                    "    }\n" +
                    "]";
    
            String sortedKeyA = sortedKeyArray(JSON.parseArray(A));
            String sortedKeyB = sortedKeyArray(JSON.parseArray(B));
    
            System.out.println(sortedKeyA);
            System.out.println("---------------------------");
            System.out.println(sortedKeyB);
    
        }
    
        private static String sortedKeyArray(JSONArray array) {
            List<Map<String, Object>> list = new ArrayList<>();
            for (Object o : array) {
                JSONObject json = JSON.parseObject(JSON.toJSONString(o));
                Map<String, Object> sortedKeyMap = new TreeMap<>(json);
                list.add(sortedKeyMap);
            }
            return JSON.toJSONString(list, JSONWriter.Feature.PrettyFormat);
        }
    
    }
    

    输出结果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 修改了问题 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用