2016-10-13 10 views
2

まあ、私はそれ でいくつかの文字列でのArrayListを持っていると私はこのような最低の最大数から各文字列が持つ重複の数と順番にそれらを取得したい:重複した文字列でのArrayListを注文

ArrayList<String> list = new ArrayList<String>(); 
    list.add("a"); 
    list.add("b"); 
    list.add("c"); 
    list.add("d"); 
    list.add("b"); 
    list.add("c"); 
    list.add("a"); 
    list.add("a"); 
    list.add("a"); 

    Set<String> uniqueSet = new HashSet<String>(list); 
    for (String temp : uniqueSet) { 

     System.out.println(temp + ": " + Collections.frequency(list, temp)); 
    } 

と私はので、私はちょうどそれは、例えば、私が呼び出したとき、私はどこかに結果を配置する必要があり、それらを印刷する必要はありませんチャートプロジェクトのためのトップ10の値を格納したい「」それができます私に。3.

+3

はなぜ「」「3」を与える呼び出すでしょうか? – ItamarG3

+1

より有用なデータ構造は、文字をキーとしてカウントを保持できるマップになります。 – digidude

+0

ああ、私は理由を見る。しかし、それはアンドロイドと何が関係していますか? – ItamarG3

答えて

0

あなたのいくつかはOOPを述べたように、私は2つの変数とゲッターセッターでモデルクラスを作成し、私はFREで名前に「TEMP」と「Collections.frequency(リスト、TEMP)」を入れて、その後、私はいくつかのオブジェクトを列挙してみましたし、次のコードでそれらを命じた:

Collections.sort(jList, new Comparator<GetJournalsModel>() { 
     @Override 
     public int compare(GetJournalsModel a1, GetJournalsModel a2) { 
      return a1.getFre() - a2.getFre(); 
     } 
    }); 
1

文字列をint(文字と周波数)を使用すると、Mapオブジェクトを使用できます。

ArrayList<String> list = new ArrayList<String>(); 
list.add("a"); 
list.add("b"); 
list.add("c"); 
list.add("d"); 
list.add("b"); 
list.add("c"); 
list.add("a"); 
list.add("a"); 
list.add("a"); 
Collections.sort(list); 
Map<String, Integer> map = new HashMap<String,Integer>(); 
for (String string : list) { 
    if(!map.containsKey(string)){ 
     map.put(string, Collections.frequency(list, string)); 
    } 
} 

このマップには必要な情報が含まれています。

HashMapは一意のキーを持つ情報を格納する便利な方法であり、各キーには値があります。

+2

Collections.sortは本当にここで必要とは思わない。 – digidude

+0

collections.sortは、キーが一意のままであることを確認する別の方法です。しかし私は同意します、非常に必要ではありません – ItamarG3

+0

@ brso05マップの値を増やすことは非常に面倒で非常に不便です。 – ItamarG3

0

グアバMultisetはすばらしいフィット感がありますが、Setのように機能しますが、要素数を記録します。トップカウント要素を取得

Multiset<String> letters = ImmutableMultiset.of("a", "b", "d", "b", "a", "a", "a", "i", "f"); 
// [a x 4, b x 2, d, f, i] 

letters.count("a"); 
// 4 

はどちらかあまりにも難しいことではありません。まあ

Multiset<String> top3 = LinkedHashMultiset.create(); 
letters.entrySet().stream() 
    .sorted((l1, l2) -> Integer.compare(l2.getCount(), l1.getCount())) 
    .limit(3) 
    .forEach(e -> top3.add(e.getElement(), e.getCount())); 
// [a x 4, b x 2, d] 
関連する問題