提问者:小点点

使用java8[重复]按属性对列表对象进行分组


我有这样的数据:

[
   {
      "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


共2个答案

匿名用户

根据您要查找的结果,您需要将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()));