Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较ArrayList中JSONArray的列表_Java_Android_Json_Arraylist - Fatal编程技术网

Java 比较ArrayList中JSONArray的列表

Java 比较ArrayList中JSONArray的列表,java,android,json,arraylist,Java,Android,Json,Arraylist,我有一个ArrayList包含JSONArrays的列表 staffArray = new ArrayList<JSONArray>(); 而ArrayList将包含不同大小的JSONArray。 现在我想为每个JSONArray检查ArrayList,如果它们包含相同的“id”值。因此,如果ArrayList有三种不同大小的JSONArray,我如何判断它们各自包含一个JSONObject,其中的“id”值相同 到目前为止,我尝试了以下方法来提取字符串: for(int i =

我有一个
ArrayList
包含
JSONArray
s的列表

staffArray = new ArrayList<JSONArray>();
ArrayList
将包含不同大小的
JSONArray
。 现在我想为每个
JSONArray
检查
ArrayList
,如果它们包含相同的“id”值。因此,如果
ArrayList
有三种不同大小的
JSONArray
,我如何判断它们各自包含一个
JSONObject
,其中的“id”值相同

到目前为止,我尝试了以下方法来提取字符串:

for(int i = 0; i < staffArray.size(); i++){
    JSONArray jsonArray = new JSONArray();
    jsonArray = staffArray.get(i);
    for(int j = 0; j < jsonArray.length(); j ++){
        JSONObject json = null;
        try {
            json = jsonArray.getJSONObject(j);
            String id = json.getString("id");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
for(int i=0;i
如果要检查
阵列列表中的重复ID,可以执行以下操作:

ArrayList<JSONArray> staffArray = new ArrayList<>();

Set<String> ids = new HashSet<>();
for (JSONArray array : staffArray) {
    for (int i = 0; i < array.length(); i++) {
        JSONObject obj = array.getJSONObject(i);
        if (!ids.add(obj.getString("id"))) {
            // duplicate IDs found, do something
        }
    }
}
ArrayList staffArray=new ArrayList();
Set id=new HashSet();
for(JSONArray数组:staffArray){
对于(int i=0;i
使用group by对具有相同id的json数组进行分组怎么样

public static void groupById(List<JSONArray> staffArray) {
    Map<String, List<JSONArray>> jsonArraysById = staffArray.stream().collect(Collectors.groupingBy(jsonArray -> getIdFromJsonArray(jsonArray)));
    jsonArraysById.forEach((id, arrays) -> {
        System.out.println("Arrays with id " + id + " are " + arrays);
    });
}

public static String getIdFromJsonArray(JSONArray jsonArray) {
    String result = null;
    for (int j = 0; j < jsonArray.length(); j++) {
        JSONObject json = null;
        try {
            json = jsonArray.getJSONObject(j);
            result = json.getString("id");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    return result;
}
publicstaticvoidgroupbyid(列表staffArray){
Map jsonArraysById=staffArray.stream().collect(Collectors.groupingBy(jsonArray->getIdFromJsonArray(jsonArray));
forEach((id,数组)->{
System.out.println(“id为“+id+”的数组是“+Array”);
});
}
公共静态字符串getIdFromJsonArray(JSONArray JSONArray){
字符串结果=null;
对于(int j=0;j
感谢您的回复,我想要的是在不同的JSONArray中找到重复项,假设ArrayList包含三个JSONArray,并检查每个JSONArray是否有一个相同的键“id”value@JerryKo我懂了。您只需将ID的
集合
移动到外部循环之外即可。请参阅我编辑的答案。
public static void groupById(List<JSONArray> staffArray) {
    Map<String, List<JSONArray>> jsonArraysById = staffArray.stream().collect(Collectors.groupingBy(jsonArray -> getIdFromJsonArray(jsonArray)));
    jsonArraysById.forEach((id, arrays) -> {
        System.out.println("Arrays with id " + id + " are " + arrays);
    });
}

public static String getIdFromJsonArray(JSONArray jsonArray) {
    String result = null;
    for (int j = 0; j < jsonArray.length(); j++) {
        JSONObject json = null;
        try {
            json = jsonArray.getJSONObject(j);
            result = json.getString("id");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    return result;
}