2017-03-06 66 views
-3

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

代码我有:

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

还什么在代码正在进行的交代,将不胜感激:)

+1

你尝试过这么远吗? –

+0

唯一让你难过的是数组和列表之间的区别?如果你有一个超出“我不知道该做什么”的真正问题,那么在回答一个特定的问题之前,我建议你尝试一下。遍历列表是微不足道的,你需要做的就是将它们放到一个字符串地图中进行计数,然后获得最高的计数(当你迭代时,你甚至可以这样做)。 –

回答

1

您可以用串映射到他们的occurence开始:

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

填充一个地图,在你的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();