JAVA 函数如何对多个JSONArray取交集,取并集

/**
   * 根据JSONArray中JSONObject的id不同取交集
   * @return
   */
    public static JSONArray intersectResult(JSONArray... arrays){
        JSONArray ret = new JSONArray();
        if(arrays==null||arrays.length==0)
            return ret;
        Set<String> first_ids=new HashSet<String>();
        Map<String,JSONObject> objs=new HashMap<String, JSONObject>();
        JSONArray first=arrays[0];
        for(int i=0;i<first.length();i++){
            JSONObject o =first.getJSONObject(i);
            String id=o.getString("id");
            first_ids.add(id);
            objs.put(id, o);
        }

        for(int i=1;i<arrays.length;i++){
            JSONArray this_array=arrays[i];
            Set<String> this_ids=new HashSet<String>();
            for(int j=0;j<this_array.length();j++){
                this_ids.add(this_array.getJSONObject(j).getString("id"));
            }
            first_ids.retainAll(this_ids);
        }

        for(String id : first_ids){
            ret.put(objs.get(id));
        }

        return ret;
    }
  /**
   * 根据JSONArray中JSONObject的id不同取并集
   * @param arrays
   * @return
   */
  public static JSONArray joinJSONArray(JSONArray... arrays){
      JSONArray ret=new JSONArray();
      Set<String> ids=new HashSet<String>();
      for(JSONArray array : arrays){
          if(array==null)
              continue;
          for(int i=0;i<array.length();i++){
              JSONObject obj=array.getJSONObject(i);
              if(ids.contains(obj.get("id")))
                  continue;
              ret.put(obj);
              ids.add(obj.getString("id"));
          }
      }
      return ret;
  }
Java中,判断两个`JSONArray`对象的元素区别,可以通过编写一个方法来比较两个`JSONArray`中的元素是否相等。比较通常涉及以下几个步骤: 1. 首先,检查两个`JSONArray`的长度是否相等,如果不相等则直接认为它们是不同的。 2. 然后,逐个比较两个`JSONArray`中的元素。这可能需要对每个元素进行类型检查,以确保它们是可以直接比较的,或者可以转换为可以直接比较的形式。 3. 对于基本数据类型或者其封装类,可以直接使用`.equals()`方法进行比较。 4. 对于嵌套的`JSONArray`或`JSONObject`,则需要递归地进行比较。 5. 如果两个`JSONArray`中包含对象,需要确定这些对象具有唯一性标识,或者可以将其转换为键值对的形式来比较。 在实际操作中,可以使用如`org.json`库中的`JSONArray`类,或者使用`com.alibaba.fastjson`库中的`JSON`类来辅助完成比较。 以下是一个使用`org.json.JSONArray`进行比较的简单示例代码: ```java import org.json.JSONArray; public class JsonArrayComparator { public static boolean areJsonArraysEqual(JSONArray arr1, JSONArray arr2) { // 如果两个JSONArray引用同一个对象,则认为它们相等 if (arr1 == arr2) { return true; } // 检查两个JSONArray的长度是否相等 if (arr1 == null || arr2 == null || arr1.length() != arr2.length()) { return false; } // 逐个元素比较 for (int i = 0; i < arr1.length(); i++) { Object obj1 = arr1.get(i); Object obj2 = arr2.get(i); // 如果元素是JSONArrayJSONObject,则递归比较 if (obj1 instanceof JSONArray && obj2 instanceof JSONArray) { if (!areJsonArraysEqual((JSONArray)obj1, (JSONArray)obj2)) { return false; } } else if (obj1 instanceof JSONObject && obj2 instanceof JSONObject) { if (!areJsonObjectsEqual((JSONObject)obj1, (JSONObject)obj2)) { return false; } } else if (!obj1.equals(obj2)) { // 对于其他类型使用equals方法进行比较 return false; } } return true; } // 用于比较JSONObject的方法(未展示具体实现) private static boolean areJsonObjectsEqual(JSONObject obj1, JSONObject obj2) { // 实现比较JSONObject的逻辑 // ... return false; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值