【问题标题】:Java Most common string element in array List [duplicate]Java数组List中最常见的字符串元素[重复]
【发布时间】:2017-03-06 15:34:04
【问题描述】:

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

我的代码:

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();

还可以解释一下代码中发生的事情:)

【问题讨论】:

  • 唯一阻碍你的是数组编码与列表编码之间的区别?当您遇到“我不知道该怎么做”之外的真正问题时,我建议您在回答特定问题之前更加努力。迭代一个列表是微不足道的,你需要做的就是把它们放到一个字符串到计数的映射中,然后得到最高的计数(你甚至可以在你迭代的时候这样做)。

标签: java arrays arraylist


【解决方案1】:

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

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

获取最大出现次数对应的key

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

【讨论】:

    【解决方案2】:

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

    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"));
    

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2015-02-21
      • 2015-11-29
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多