我在论坛上已经阅读了它,但是有许多解决方案可用它们似乎都不适用于我,我有一个数组列表,正在程序运行时填充,最后我想找到发生了哪个字符串元素最简单的打印出它是哪一个。我已经看到了一些使用地图和比较器的解决方案,但我不知道如何使它们工作,因为它们更多地用于数组而不是数组列表,我不知道如何使它适应我的。
我的代码:
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();
此外,对代码中发生的事情的解释也将受到赞赏:)
答案 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"));