値に応じて降順でソートしたい。どのように私はJavaでそれを行うのですか?Javaの値に基づいてマップをソートする最も簡単な方法は何ですか?
6
A
答えて
1
13
HashMap
(およびその旧いプレセッサーHashtable
)は、本質的に順序付けられていない。ソートしても、順序は変わりません。広告掲載オーダーを維持する場合は、代わりにLinkedHashMap
を使用してください。 のキーの自動ソートを希望する場合は、挿入順に関係なくSortedMap
を使用してください。
の値をに並べ替える場合は、基本的に別の種類のソート可能なデータ構造にキー/値のペアを配置する必要があります。 List<Entry<K, V>>
を入力し、Compatator<Entry<K, V>>
の助けを借りてCollections#sort()
を使用してソートし、最後にLinkedHashMap
を再充填します(HashMap
ではありません)。
ここでは基本的な例(脇取り扱い明らか実行時例外を残して)です:
// Prepare.
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "bar");
map.put("bar", "waa");
map.put("waa", "foo");
System.out.println(map); // My JVM shows {waa=foo, foo=bar, bar=waa}
// Get entries and sort them.
List<Entry<String, String>> entries = new ArrayList<Entry<String, String>>(map.entrySet());
Collections.sort(entries, new Comparator<Entry<String, String>>() {
public int compare(Entry<String, String> e1, Entry<String, String> e2) {
return e1.getValue().compareTo(e2.getValue());
}
});
// Put entries back in an ordered map.
Map<String, String> orderedMap = new LinkedHashMap<String, String>();
for (Entry<String, String> entry : entries) {
orderedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(orderedMap); // {foo=bar, waa=foo, bar=waa}
は、次のComparator
を使用し、はをdescencingそれをソートします。基本的にはちょうど比較するのエントリを入れ替える:ここ
Collections.sort(entries, new Comparator<Entry<String, String>>() {
public int compare(Entry<String, String> e1, Entry<String, String> e2) {
return e2.getValue().compareTo(e1.getValue()); // Sorts descending.
}
});
0
は、私はそれを行う方法です。
public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}
関連する問題
- 1. URLをJavaのリクエストハンドラにマップする最も簡単な方法
- 2. クエリの結果に基づいてレコードを挿入する最も簡単な方法は何ですか?
- 3. テキストに基づいてUIButtonサイズを調整する最も簡単な方法
- 4. Javaでカスタムバイナリデータメッセージを設定する最も簡単な方法は何ですか?
- 5. 以下の方法で文字列のリストをソートする最も簡単な方法は何ですか?
- 6. オブジェクトのリストをソートする最も簡単な方法
- 7. AzureテーブルストレージデータモデルをNode.jsにマップする最も簡単な方法
- 8. プロパティ値に基づいてオブジェクトを別々のリストに入れるのが最も簡単な方法
- 9. Javaでデータベースメタデータを取得する最も簡単な方法は?
- 10. PHPのルートをマップする最も簡単な方法
- 11. 最も簡単なJavaマルチプレイヤーネットワークゲームは何ですか?
- 12. C#のキーに基づいてNameValueCollectionをソートする簡単な方法はありますか?
- 13. コマンドラインで新しいファイルを作成する最も簡単で簡単な方法は何ですか?
- 14. boost :: statechart :: state_machineをスレッドセーフにする最も簡単な方法は何ですか?
- 15. ソースコードをリモートコンピュータにアップロードする最も簡単な方法は何ですか?
- 16. ファイルをJavascriptプログラムにリンクする最も簡単な方法は何ですか?
- 17. 城ActiveRecord:SQLを見るのに最も簡単な方法は何ですか?
- 18. VisualStudio2008の開発にlibpngを利用する最も簡単で簡単な方法は何ですか?
- 19. このheirarchicalテーブルをフラットテーブルに非正規化する最も簡単で簡単な方法は何ですか?
- 20. TensorFlowを使い始める最も簡単な方法は何ですか?
- 21. Xamarin.formでSQLiteデータベースにアクセスする最も簡単な方法は何ですか?
- 22. 春の最も簡単で最も透過的な方法をキャッシングする方法は何ですか?
- 23. 文字列のみを含むArrayListをソートする最も簡単な方法は何ですか?
- 24. Javaでjarを解凍する最も簡単な方法
- 25. 重複に基づいて2D配列要素を合計する最も簡単な方法は?
- 26. Python:time.time()の値をtime.strftime()の値に変換する最も簡単な方法は何ですか?
- 27. 春のプロジェクトを開始する最も簡単な方法は何ですか?
- 28. GoogleのAPIを使用する最も簡単な方法は何ですか?
- 29. JSON文字列をjavabeanに変換/マップする最も簡単な方法は何ですか?
- 30. .NETリモートサーバーオブジェクトに接続する最も簡単な方法は何ですか
あなたはあなたの問題について、より具体的なことができますか?実際の問題に応じて、値で並べ替える代わりになる可能性があります。 – Carl