我正在尝试计算键值在地图中出现的次数。我想做的是计数并返回重复名称出现的次数以及JSON数组中的性别并返回它。因此,下面的数据应返回:
女:2 男:2
以2为重复名称出现的次数。
到目前为止,我已经通过使用ObjectMappers和解析器将JSON数据从文件中读取到Java对象中。但不确定如何计算重复的名称并将其放入Gender变量中。我尝试使用一条语句来匹配字符串(map.get(i).get(“ fullName”)== Williams),但是它没有用。任何人都有任何想法或知道更好的方法来做到这一点。谢谢
我的代码:
ObjectMapper mapper = new ObjectMapper();
JSONParser parser = new JSONParser();
JSONObject jsonobj = (JSONObject) parser.parse(new FileReader("data.json"));
JSONArray jsons = (JSONArray) jsonobj.get("Person");
//Map<Integer, Map<String, String>> jsonmaps = new HashMap<Integer, Map<String, String>>();
int i = 0;
List<Map<String, String>> map = new ArrayList();
for (Object j : jsons) {
map.add(mapper.readValue(j.toString(), new TypeReference<Map<String, String>>() {}));
i++;
}
// for testing purposes
//System.out.println(map.get(1).get("fullName"));
//System.out.println(map.get(1).get("age"));
//System.out.println(map.get(1).get("Gender"));
//System.out.println(map.get(1).get("adult"));
//System.out.println(map.get(1).get("dob"));
}
JSON文件:
{
"fullName": "Bob Wilkins",
"age": 25,
"gender": "male"
},
{
"fullName": "Hannah Williams",
"age": 49,
"gender": "Female",
"isAdult": true,
"dob": 29/12/1968
},
{
"fullName": "Charlie Smith",
"age": 10,
"gender": "Male",
"isAdult": false,
"dob": 21/05/2008
},
{
"fullName": "Hannah Williams",
"age": 31,
"gender": "Female",
"isAdult": true,
"dob": 13/02/1987
},
{
"fullName": "Charlie Smith",
"age": 25,
"gender": "Male",
"isAdult": true,
"dob": 08/08/1994
},
.....
答案 0 :(得分:0)
以下内容对class ReporterAPI(viewsets.ModelViewSet):
queryset = Reporter.objects.all()
serializer_class = ReporterSerializer
进行分组,然后按gender
对每个集合进行分组。结果是fullName
,其中值被限制为大于1的值,然后相加。
Map<String, Long>
当Map<String, Long> counts =
map.stream()
.collect(Collectors.groupingBy(m -> m.get("gender")))
.entrySet()
.stream()
.map(entry -> new SimpleEntry<>(entry.getKey(),
entry.getValue().stream()
.collect(Collectors.groupingBy(m -> m.get("fullName"),
Collectors.counting()))
.values().stream()
.mapToLong(l -> l)
.filter(value -> value > 1).sum()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
是问题中的测试数据时,结果为:
maps
因此可以在您的{Male=2, Female=2, male=0}
列表上运行。