2017-03-06 10 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(){ 

    } 

要素はコードでの異なる部分に添加されます。

私は、そのリストから最もよく出現するものを見つけるために、私が作成した関数を使うのが簡単な方法が必要です。 FindMostCommon();あなたは彼らの出現に文字列をマッピングして開始することができます。また、コードで何が起こっているのかの、について説明をいただければ幸いです:)

+1

を数えなさい? –

+0

唯一のことは、配列とリストのコーディングの違いです。 「私は何をすべきかわからない」という本物の問題を抱えているときに、特定の質問に戻ってくる前に、もう少し努力することをおすすめします。リストを反復するのは簡単ではなく、文字列のマップに数えてそれらをドロップしてから、最高の数を得るだけです(反復しても可能です)。 –

答えて

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")); 
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(); 
関連する問題