滴滴撕滴颩 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 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染