首页 > 解决方案 > 如何根据频率输出 ArrayList 的元素?

问题描述

我的 Arraylist 看起来像 [A, B, D, E, C, A, A, B]

我想打印到控制台

A,3
B,2
C,1
D,1
E,1

我怎样才能在 Java 中做到这一点?

标签: arraylistcollections

解决方案


您可以使用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)));
    }
    
}

编辑:我错过了排序部分。


推荐阅读