jackmao 把两个JSONArray 合并成新的JSONArray

public static void main(String[] args) {
    // 假设这是你的两个 JSONArray
    JSONArray jsonArray1 = new JSONArray();
    jsonArray1.add(createJsonObject("id", 1, "name", "Alice"));
    jsonArray1.add(createJsonObject("id", 2, "name", "Bob"));

    JSONArray jsonArray2 = new JSONArray();
    jsonArray2.add(createJsonObject("id", 1, "age", 30));
    jsonArray2.add(createJsonObject("id", 2, "age", 25));

    // 将第一个 JSONArray 转换为 Map,键为 id,值为 JSONObject
    Map<Integer, JSONObject> map = jsonArray1.stream()
            .map(obj -> (JSONObject) obj)
            .collect(Collectors.toMap(obj -> obj.getInteger("id"), obj -> obj));

    // 使用 Stream 的 filter 和 map 操作,匹配并合并 JSONObject
    JSONArray mergedArray = jsonArray2.stream()
            .map(obj -> (JSONObject) obj)
            .filter(obj -> map.containsKey(obj.getInteger("id")))
            .map(obj -> {
                JSONObject mergedObject = new JSONObject();
                mergedObject.putAll(map.get(obj.getInteger("id")));
                mergedObject.putAll(obj);
                return mergedObject;
            })
            .collect(Collectors.toCollection(JSONArray::new));

    // 输出合并后的 JSONArray
    System.out.println(mergedArray.toJSONString());

}

// 创建一个 JSONObject
private static JSONObject createJsonObject(String key1, Object value1, String key2, Object value2) {
    JSONObject obj = new JSONObject();
    obj.put(key1, value1);
    obj.put(key2, value2);
    return obj;
}

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class JsonArrayMerge {
    public static void main(String[] args) {
        // 假设这是你的两个 JSONArray
        JSONArray jsonArray1 = new JSONArray();
        jsonArray1.add(createJsonObject("id", 1, "name", "Alice"));
        jsonArray1.add(createJsonObject("id", 2, "name", "Bob"));

        JSONArray jsonArray2 = new JSONArray();
        jsonArray2.add(createJsonObject("id", 1, "age", 30));
        jsonArray2.add(createJsonObject("id", 2, "age", 25));

        // 使用 HashMap 存储第一个 JSONArray 中的 JSONObject,键为 id,值为 JSONObject
        Map<Integer, JSONObject> map = new HashMap<>();
        for (Object obj : jsonArray1) {
            JSONObject jsonObject = (JSONObject) obj;
            map.put(jsonObject.getInteger("id"), jsonObject);
        }

        // 使用 Stream 的 map 操作遍历第二个 JSONArray,匹配并合并 JSONObject
        JSONArray mergedArray = jsonArray2.stream()
                .map(obj -> (JSONObject) obj)
                .filter(obj -> map.containsKey(obj.getInteger("id")))
                .map(obj -> {
                    JSONObject mergedObject = new JSONObject();
                    mergedObject.putAll(map.get(obj.getInteger("id")));
                    mergedObject.putAll(obj);
                    return mergedObject;
                })
                .collect(JSONArray::new, JSONArray::add, JSONArray::addAll);

        // 输出合并后的 JSONArray
        System.out.println(mergedArray.toJSONString());
    }

    // 创建一个 JSONObject
    private static JSONObject createJsonObject(String key1, Object value1, String key2, Object value2) {
        JSONObject obj = new JSONObject();
        obj.put(key1, value1);
        obj.put(key2, value2);
        return obj;
    }
}

在这个示例中,我们使用了 HashMap 来存储第一个 JSONArray 中的 JSONObject,键为 id,值为 JSONObject。这样在进行匹配时,可以直接通过 HashMap 的 containsKey 方法来判断是否存在匹配的 id,大大提高了匹配效率。其他部分与之前的代码逻辑相同。

这种优化方法可以显著提高程序的性能,特别是当第一个 JSONArray 中的元素数量较大时。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值