備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

AndroidでMapをソートしたくなったので作成したクラス

Listのソートは分かったのですが、Mapクラスのソートがしたくなったので、stackoverflowを参考に作成しました。
そのときのメモ

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class MapUtil {
    public static <K, V extends Comparable<? super V>>Map<K, V> sortByKey(Map<K, V> map){
        List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>( map.entrySet() );
        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
            @Override
            public int compare(Map.Entry<K, V> lhs, Map.Entry<K, V> rhs) {
                return (Integer.valueOf((String)rhs.getKey())).compareTo( Integer.valueOf((String) lhs.getKey()) );
            }
        });
        Map<K, V>result = new LinkedHashMap<K, V>();
        for(Map.Entry<K, V>entry: list){
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }
    public static <K, V extends Comparable<? super V>>Map<K, V> sortByValue(Map<K, V> map){
        List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>( map.entrySet() );
        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
            @Override
            public int compare(Map.Entry<K, V> lhs, Map.Entry<K, V> rhs) {
                return (lhs.getValue()).compareTo( rhs.getValue() );
            }
        });
        Map<K, V>result = new LinkedHashMap<K, V>();
        for(Map.Entry<K, V>entry: list){
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }
}

他にも方法はあると思いますが、このクラスを使用する事でMapクラスのソートは出来るようになりました。stackoverflow.com