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 中的元素数量较大时。