我有一个场景,我需要读取一个JSON文件并检查一个键(MEMBER_ID
)的重复条目,如果存在重复,那么我需要获取最后一个条目(成员的最新更新详细信息)并添加到最终名单。例如,在json下面,对于MEMBER_ID=123
,有2个条目,其中一个LASTNAME
,VSDWRVFFZA
应添加到最终列表中。我尝试了几种方法来进行过滤,但无法提出最终解决方案。有人可以建议我如何处理这个问题?
我写的逻辑是:
List<Map<String, Object>> finalList = new ArrayList<>();
...
...
`if (file.exists() && file.length() != 0) {
jsonValue = objectMapper.readValue(file, List.class);
jsonValue.forEach(value -> {
try {
populateAndMapJSON(value);
} catch (IOException e) {
e.printStackTrace();
}
});`...
...
private void populateAndMapJSON(Map<String, Object> value) throws IOException {
if ((value.containsKey(FIRST_NAME) || value.containsKey(LAST_NAME)) {
// NOT SURE HOW TO PUT FILTER HERE FOR GIVEN SCENARIO
finalList.add(value);
...
..
//我正在使用的JSON:
{
"MEMBER_ID": "123",
"LASTNAME": " fgjksnc",
"BIRTH_DATE": "1905-12-29",
"FIRSTNAME": "abcdf",
}, {
"MEMBER_ID": "09876",
"M": "abc",
"N": "def"
}, {
"MEMBER_ID": "123",
"LASTNAME": "VSDWRVFFZA",
"BIRTH_DATE": "1905-12-20",
"FIRSTNAME": "UFZCY LGNF",
}
答案 0 :(得分:0)
使用流API,您可以
代码:
Set<Map<String, Object>> uniqueByLast = finalList.stream()
.collect(Collectors.groupingBy(m -> m.get("MEMBER_ID"))) // group by id
.entrySet().stream()
.map(e -> e.getValue().stream()
.reduce((first, second) -> second)) // find last, if multiple entries
.map(Optional::get)
.collect(Collectors.toSet());
因此,您将获得一组所有唯一对象图。