java stream 分组统计
时间: 2024-12-28 12:26:49 浏览: 11
### Java Stream API Group By 和 Count 示例
对于给定的一系列对象,可以利用 `Stream` 接口中的方法来执行分组和计数操作。下面是一个具体的例子,展示了如何通过商品名称对列表进行分组并计算每种商品的数量。
假设有一个名为 `Item` 的类,其中包含一个表示物品名称的方法 `getName()`:
```java
Map<String, Long> counting = items.stream()
.collect(Collectors.groupingBy(Item::getName, Collectors.counting()));
```
上述代码创建了一个映射表,键为商品名而值则代表该商品出现次数[^1]。这里使用了两个收集器:一个是用于按商品名字串分组 (`Collectors.groupingBy`);另一个则是用来统计各分组内元素数量(`Collectors.counting`)。
为了更清晰地理解整个过程的工作原理,考虑如下完整的实例代码片段:
```java
import java.util.*;
import java.util.stream.Collectors;
class Item {
private final String name;
public Item(String name) { this.name = name; }
public String getName() { return name; }
@Override
public boolean equals(Object o){
if (this == o) return true;
if (!(o instanceof Item)) return false;
Item item = (Item) o;
return Objects.equals(name, item.name);
}
}
public class Main {
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("apple"),
new Item("banana"),
new Item("orange"),
new Item("apple"),
new Item("banana")
);
Map<String, Long> result = items.stream()
.collect(Collectors.groupingBy(Item::getName, Collectors.counting()));
System.out.println(result); // 输出: {orange=1, banana=2, apple=2}
}
}
```
这段程序定义了一个简单的 `Item` 类以及一组测试数据,在此基础上实现了基于流的操作来进行分组与计数,并最终打印出了结果集。
阅读全文