arraylist - 如何根据频率输出 ArrayList 的元素?
问题描述
我的 Arraylist 看起来像 [A, B, D, E, C, A, A, B]
我想打印到控制台
A,3
B,2
C,1
D,1
E,1
我怎样才能在 Java 中做到这一点?
解决方案
您可以使用Stream完成此操作。
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
class MyClass {
public static void main(String...args) {
printListElementFrequencies(Arrays.asList("A", "B", "D", "E", "C", "A", "A", "B"));
}
static void printListElementFrequencies(List<String> list) {
Map<String, Long> frequencies = list.stream().collect(Collectors.groupingBy(s -> s, TreeMap::new, Collectors.counting()));
Comparator<String> sortByFrequencyThenLexicographically = Comparator.<String, Long>comparing(frequencies::get).reversed().thenComparing(Comparator.comparing(s -> s));
list.stream().sorted(sortByFrequencyThenLexicographically).forEach(s -> System.out.println(s + ", " + frequencies.get(s)));
}
}
编辑:我错过了排序部分。
推荐阅读
- middleware - 找不到满足 CORSMiddleware 要求的版本(来自版本:)没有为 CORSMiddleware 找到匹配的发行版
- python - 在 Matplotlib 画布上绘制单独的线并将坐标写入数据框
- php - 从 CTP 添加自定义 WooCommerce 下拉结帐字段
- regex - 对不包含特定单词的句子使用正则表达式匹配
- javascript - 查找最大大小为 L 且总和为 N 或更少的所有可能数组的算法
- css - 有没有办法在 PyCharm 中使用 CSS?
- sql-server - 当我知道我的数据库文件将驻留在 SSD 驱动器上时,我是否应该以不同的方式设计我的数据库表和关系?
- kotlin - 无法从请求中捕获正文
- powershell - PowerShell 如何使用 -replace 在两个不同的字符之间进行清理
- python - 使用 Tesseract OCR 从扫描的 pdf 文件夹中提取文本