我有这样的数据:
[
{
"category":"Fruits",
"name":"Apple"
},
{
"category":"Fruits",
"name":"Manggo"
},
{
"category":"Vegetables",
"name":"Water Spinach"
}
]
我想分组java8,我试过:
Map<String, List<MyData>> myData
= list.stream().collect(Collectors.groupingBy(d -> d.getCategory()));
但是结果不是我需要的。因为我预期的结果是水果=2,蔬菜=1
根据您要查找的结果,您需要将groupingBy()
收集器与计数()
收集器一起使用:
Map<String, Long> soldCopiesStats = list
.stream()
.collect(Collectors.groupingBy(MyData::getCategory, Collectors.counting()));
您可以使用Collectors.计数
作为groupingBy
的下游收集器来获取每个组中的计数。
Map<String, Long> myData = list.stream()
.collect(Collectors.groupingBy(d -> d.getCategory(), Collectors.counting()));