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;
}