2016-04-05 13 views
2

私はいくつかの文字列のリストを持っています。私は、dublicatesをマージし、重複のカウンターを追加する必要があります。たとえば、次のようにリストに重複をマージする

list1.add("Mom"); 
list1.add("Mom"); 
list1.add("Son"); 
list1.add("Son"); 
list1.add("Dad"); 
list1.add("Dad"); 

マージとカウンター

を追加し、出力は次のようにする必要があります:

Mom 2 
Son 2 
Dad 2 

また、私はこの新しいリストをソートする必要がありますが、私はちょうどコレクションを使用することができると思います、それをする。

+2

ここでピカピカですが、出力はその特定の順序である必要がありますか、アルファベット(あるいは任意の)でも許されますか? – Bathsheba

+0

何を試しましたか?そして、まだ何も試してみませんか? – f1sh

+0

理想的には、昇順でソートする必要がありますが、それを行う方法はわかります。 –

答えて

5
public static Map<String, Long> getValuesWithNumberOfOccurrences(
     List<String> list) { 
    return list.stream() 
       .collect(
        Collectors.groupingBy(i -> i, HashMap::new, 
        Collectors.counting())); 
} 
+0

コードに少し説明を加えることができますか? –

+0

よろしいですか –

1

使用HashMap重複を保つために:

HashMap<String, Integer> map = new HashMap<>(); 
    for (int i = 0; i < list.size(); i++) { 
     String text = list.get(i); 
     if(map.get(text) == null) { 
      map.put(text, 1); 
     } else { 
      map.put(text, map.get(text) + 1); 
     } 
    } 

    for (String text : map.keySet()) { 
     System.out.println(text + " " + map.get(text)); 
    } 
1

私は、出力順序は、キーが最初に遭遇された順序を尊重する必要があることを想定しています。幸いにも、巧妙なJavaのボディーは、その目的のオブジェクトを設計しました:java.util.LinkedHashMap

java.util.Map<String, Integer> map = new java.util.LinkedHashMap<>()

をお使いのストレージ・オブジェクトの使用を設定するには

はファンシーダイヤモンドの表記に注意してください。

はその後、文字列としてnameで、

if (map.containsKey(name)){ 
    map.put(key, map.get(key) + 1); 
} else { 
    map.put(key, 1); 
} 

ような何かを書くこれは少し最適化することができます:あなたはkeyが存在しない場合map.get(key)nullになるという事実に頼ることができます。これにより、containsKeyコールが不要になります。

最後に、出力に自分の価値観は、あなたの出力は、代わりにjava.util.TreeMapを使用するキーでソートしたい場合は

for (java.util.Map.Entry<String, Integer> entry : map.entrySet()){ 
    /*ToDo - use entry.getKey() and entry.getValue()*/ 
} 

の行に何かを使用しています。出力の順序が重要でない場合は、java.util.HashMapを使用してください。

-1

重複をマージして重複カウンタを追加する必要があります。

重複するものが気になる場合は、Setを分離してください。設定する要素を追加しようとしたときに、addメソッドがfalseを返した場合は、2カウントでデータを出力します。

しかし、エントリが2回以上発生する可能性がある場合は、最後まで各エントリのカウントのトラックを保持する必要があります。ですから、各文字列をキーとして使用し、代わりに値としてマップを使用してください。それは基本的に、文字列をマップに追加するときに意味します。
- nullでない場合は、その値を取得して1を増やし、その値を再度設定します。
- nullの場合は、value = 1のマップに追加してください。

最後に、繰り返し回数を見つけることができます。

関連する問題