を使用できない場合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));