比较ArrayList中的JSONArray列表

时间:2017-06-08 06:51:49

标签: java android json arraylist

我的ArrayList包含JSONArray s

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

JSONArray的形式如下:

[
    {
      "id": "k40dn-dff02-mm1",
      "name": "staff1",
      "tel": "0123456789",
    },
    {
      "id": "ch2mq-pmw01-ps6",
      "name": "staff2",
      "tel": "9876543210",
    }
    ...
]

ArrayList将包含不同大小的JSONArray。 现在,我想为每个ArrayList检查JSONArray,如果它们包含“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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果您想检查ArrayList中的重复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
        }
    }
}

答案 1 :(得分:0)

如何使用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;
}