java stream 统计出现次数
时间: 2024-12-26 15:25:59 浏览: 13
### 使用 Java Stream API 统计集合中元素出现的次数
为了统计集合中各个元素出现的次数,可以通过 `Collectors.groupingBy` 或者 `Collectors.toMap` 方法来实现。以下是具体的方法:
#### 方法一:使用 `groupingBy`
这种方法利用了 `Collectors.groupingBy` 和 `counting()` 的组合,能够方便地统计每个元素的数量。
```java
import java.util.*;
import java.util.stream.Collectors;
public class ElementFrequency {
public static void main(String[] args) {
List<String> elements = Arrays.asList("apple", "banana", "orange", "apple", "grape", "banana");
Map<String, Long> frequencyMap = elements.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
System.out.println(frequencyMap);
}
}
```
这段代码创建了一个字符串列表,并通过流操作将其转换成一个映射表,其中键是原始列表中的不同项,而值则是这些项各自的频率[^1]。
#### 方法二:使用 `toMap`
另一种方式是采用 `Collectors.toMap` 来构建相同的效果。这种方式允许更灵活的操作,比如自定义冲突解决策略等。
```java
import java.util.*;
import java.util.stream.Collectors;
public class ElementFrequencyToMap {
public static void main(String[] args) {
List<String> elements = Arrays.asList("apple", "banana", "orange", "apple", "grape", "banana");
Map<String, Integer> frequencyMap = elements.stream()
.collect(Collectors.toMap(
element -> element,
element -> 1,
Integer::sum));
System.out.println(frequencyMap);
}
}
```
这里同样实现了对给定列表内各元素频次的统计工作,不过采用了不同的收集器——`toMap`,它接受三个参数:键生成器、值生成器以及用于合并重复键所对应的值的函数[^2]。
这两种方法都能有效地完成任务,选择哪一种取决于个人偏好或是特定场景下的需求差异。对于大多数情况来说,推荐优先考虑 `groupingBy` 方式因为它更为直观易懂且性能良好[^3]。
阅读全文