この質問にはすでに答えがあります。
だから私はファイルを読んでいて、そのファイル内の重複の数を数える必要があります。店の重複はできません。それから、出現順に基づいてファイルの内容を表示する必要があります。
私のコードはこれまでのところ:
// use hashmap to store the values
Map<String, Integer> myMap = new HashMap<>();
// loop through
for (String line = r.readLine(); line!=null; line = r.readLine()) {
if (myMap.containsKey(line)) {
myMap.put(line, myMap.get(line)+1);
} else {
myMap.put(line, 1);
}
}
それらは固有のキーを持っているので、私はそれらをマップに格納しています。私が直面している問題は私が最大から最小まで整数の値でそれらをソートする必要があるということです。
入力例:
World
World
World
Hello
Hello
Hello
Hello
期待される出力:
Hello
World
TreeMapを確実に使用できますが、HashMapですべての作業がすでに行われている場合は、ArrayListにエクスポートしてコンパレータを使用して並べ替えるだけの簡単な方法があります。これを実現する方法は次のとおりです。
//This comparator sorts by HashMap values.
Comparator <Map.Entry<String, Integer>> sortCompare =
(Map.Entry<String, Integer> firstValue, Map.Entry<String, Integer> secondValue)
-> secondValue.getValue().compareTo(firstValue.getValue());
//This is the list that will hold each entry from the map.
List<Map.Entry<String, Integer>> orderedList = new ArrayList<>();
//Pulls the data from the existing map.
orderedList.addAll(myMap.entrySet());
//Now all that is left to do is sort with the comparator we made.
Collections.sort(orderedList, sortCompare);
//Now the array list is ordered largest to smallest and you can do whatever with it.
私はTreeMapを特に好きではないのでこれは私がソートを処理する方法ですが、HashMapを排除したいのならいくつかの研究をしてそれらを使って作業することができます。
TreeMapを使用すると、一意の文字列をキーとして、出現回数を値として格納できます。 TreeMapはカスタムコンパレータをサポートしているため、マップ内のすべてのエントリを並べ替えるロジックを作成できます。