2017-03-06 105 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();