stream按数量分组
时间: 2025-01-09 09:40:33 浏览: 20
使用 Java Stream API 进行分组并计数
当处理集合数据时,Stream API
提供了一种简洁而强大的方式来执行诸如过滤、映射以及聚合操作。对于按照特定属性进行分组并且计算每组内元素数量的需求,可以利用 Collectors.groupingBy()
结合 Collectors.counting()
来实现。
下面是一个简单的例子展示如何基于对象的一个字段来进行分组,并统计各组中的元素数目:
import java.util.*;
import java.util.stream.Collectors;
class Item {
private String name;
public Item(String name){
this.name = name;
}
public String getName(){
return name;
}
}
public class Main {
public static void main(String[] args) {
List<Item> items = Arrays.asList(new Item("apple"), new Item("banana"), new Item("apple"));
Map<String, Long> counting = items.stream()
.collect(Collectors.groupingBy(Item::getName, Collectors.counting()));
System.out.println(counting);
}
}
这段代码创建了一个名为 items
的列表,其中包含了若干个 Item
对象实例。接着通过流的方式调用了 groupingBy
方法指定按 name
属性分组的同时应用了 counting
收集器用于记录每一组里有多少项[^1]。
如果希望进一步扩展此功能,比如依据多个条件进行分组,则可以根据需求调整参数传递给 groupingBy
函数。例如,在另一个案例中展示了怎样根据两个不同属性组合成键值对的形式完成多级分类的任务[^2]。
为了获取更灵活的结果呈现形式,还可以考虑先收集到临时结构再转换为目标类型的数据结构,如上述第二个引用所示的操作流程。
最后值得注意的是,有时可能还需要对最终得到的地图按键或值做额外排序处理;此时可参考关于如何在 Java 中对地图条目排序的相关讨论[^3]。
相关推荐


















