嗨,我正在尝试比较两个json对象的文件,并且必须在json数组中重复。
下面是我的输入,它是两个json对象的json数组。两个json对象都具有称为 Architectural 的相同标签,因此必须避免, 我想使用文件名数组制作单个json对象,而没有重复和文件大小
在json对象数组中,每个对象可能包含具有不同长度的名称json数组
[ {
"bucket": "vanasiri-100-98748-33434346-34545567002",
"path": "1127/1854/1/BidSet/Architectural_Drawing/",
"UpdatedBy": "100",
"fileSize": ["0"],
"name": ["Display external company list.docx"],
"tag": "Architectural",
"uploadedDate": "03-30-2019"
}, {
"bucket": "vanasiri-100-98748-33434346-34545567002",
"path": "1127/1854/1/BidSet/Architectural_Drawing/",
"UpdatedBy": "100",
"fileSize": ["0"],
"name": ["images.jfif"],
"tag": "Architectural",
"uploadedDate": "03-30-2019"
}
]
预期结果
[{
"bucket": "vanasiri-100-98748-33434346-34545567002",
"path": "1127/1854/1/BidSet/Architectural_Drawing/",
"UpdatedBy": "100",
"fileSize": ["0", "0"],
"name": ["Display external company list.docx", "images.jfif"],
"tag": "Architectural",
"uploadedDate": "03-30-2019"
}]
我该如何实现
答案 0 :(得分:1)
为您的列表内的JSON对象创建一个Model类,例如BucketData,您可以将JSON数组转换为模型数组列表。
应如下所示:
JSONArray jArray = (JSONArray)jsonObject;
if (jArray != null) {
for (int i=0;i<jArray.length();i++){
listdata.add(jArray.getString(i));
}
}
然后,您可以执行Java 8过滤操作,以过滤出重复的值,如下所示:
List listdata = listdata.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(BucketData:: getTag))),
ArrayList::new));
引自https://stackoverflow.com/a/17037364/4597596和https://stackoverflow.com/a/55512294/4597596
答案 1 :(得分:0)
我认为,您应该首先将JSON数组转换为SET;一个精确的HASHSET。 HASHSET不允许您存储重复的元素。
现在,如何将数组转换为哈希集?请参阅此论坛上较早的讨论之一-How to convert an Array to a Set in Java