Java数组List中最常见的字符串元素

时间:2017-03-06 15:34:05

标签: java arrays arraylist

我在论坛上已经阅读了它,但是有许多解决方案可用它们似乎都不适用于我,我有一个数组列表,正在程序运行时填充,最后我想找到发生了哪个字符串元素最简单的打印出它是哪一个。我已经看到了一些使用地图和比较器的解决方案,但我不知道如何使它们工作,因为它们更多地用于数组而不是数组列表,我不知道如何使它适应我的。

我的代码:

static ArrayList<String> sequence = new ArrayList<String>();

////////////////////// ARRAY LIST ////////////////////////////////

    public static void PrintArray(){
        System.out.println("The Movement sequence is:  " + sequence);

    }

    public static void FindMostCommon(){

    }

元素添加在代码的不同部分;

sequence.add("MoveLeft() ");

我需要一种简单的方法来查找该列表中最常见的一个,最好使用我创建的函数; FindMostCommon();

此外,对代码中发生的事情的解释也将受到赞赏:)

2 个答案:

答案 0 :(得分:2)

使用ArrayList中的唯一字符串填充地图并计算其出现次数

Map<String,Long> counts = sequence.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));

获取与最大出现次数相对应的密钥

String s = counts.entrySet().stream().max(Map.Entry.comparingByValue()).get().getKey();

答案 1 :(得分:1)

您可以从将字符串映射到它们的出现开始:

Map<String, Integer> countPerString = new HashMap<String, Integer>();
sequence.forEach(s -> countPerString.put(s, countPerString.getOrDefault(s, 0) + 1));

然后你只需找到计数最高的密钥:

    String max = countPerString.keySet().stream().reduce((s1, s2) -> {
        if (countPerString.get(s1) > countPerString.get(s2)) {
            return s1;
        }
        return s2;
    }).orElseThrow(() -> new IllegalStateException("no max found"));