を使用できない場合TreeMap
、Java 8では、次のパラメーターを使用するtoMap()メソッドを使用できCollectors
ます。
- keymapper:キーを生成するためのマッピング関数
- valuemapper:値を生成するためのマッピング関数
- mergeFunction:同じキーに関連付けられた値間の衝突を解決するために使用されるマージ関数
- mapSupplier:結果が挿入される新しい空のMapを返す関数。
Java 8の例
Map<String,String> sample = new HashMap<>(); // push some values to map
Map<String, String> newMapSortedByKey = sample.entrySet().stream()
.sorted(Map.Entry.<String,String>comparingByKey().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
Map<String, String> newMapSortedByValue = sample.entrySet().stream()
.sorted(Map.Entry.<String,String>comparingByValue().reversed())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1,e2) -> e1, LinkedHashMap::new));
カスタムコンパレーターを使用し、次のようにキーに基づいてソートするように例を変更できます。
Map<String, String> newMapSortedByKey = sample.entrySet().stream()
.sorted((e1,e2) -> e1.getKey().compareTo(e2.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1,e2) -> e1, LinkedHashMap::new));