Как отсортировать карту <Key, Value> по значениям в Java с помощью функции упорядочивания коллекций Google - PullRequest
1 голос
/ 22 мая 2010

Как отсортировать карту (?, B) по значениям в Java с помощью функции упорядочения коллекций Google, если B - это класс, имеющий поле типа double, которое следует использовать для упорядочения.

Ответы [ 2 ]

4 голосов
/ 23 мая 2010

Вот фрагмент кода, который использует универсальный метод, который принимает Map<K,V> и Comparator<? super V> и возвращает SortedSet его entrySet(), отсортированного по значениям с использованием компаратора.

public class MapSort {
    static <K,V> SortedSet<Map.Entry<K,V>>
    entriesSortedByValues(Map<K,V> map, final Comparator<? super V> comp) {
        SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<Map.Entry<K,V>>(
            new Comparator<Map.Entry<K,V>>() {
                @Override public int compare(Entry<K, V> e1, Entry<K, V> e2) {
                    return comp.compare(e1.getValue(), e2.getValue());
                }

            }
        );
        sortedEntries.addAll(map.entrySet());
        return sortedEntries;
    }
    static class Custom {
        final double d;   Custom(double d) { this.d = d; }
        @Override public String toString() { return String.valueOf(d); }
    }
    public static void main(String[] args) {
        Map<String,Custom> map = new HashMap<String,Custom>();
        map.put("A", new Custom(1));
        map.put("B", new Custom(4));
        map.put("C", new Custom(2));
        map.put("D", new Custom(3));
        System.out.println(
            entriesSortedByValues(map, new Comparator<Custom>() {
                @Override public int compare(Custom c1, Custom c2) {
                    return Double.compare(c1.d, c2.d);
                }           
            })
        ); // prints "[A=1.0, C=2.0, D=3.0, B=4.0]"
    }
}

В Google Ordering

public static <T> Ordering<T> from(Comparator<T> comparator)

Возвращает заказ для уже существующего компаратора.В приведенном выше решении используется Comparator, поэтому вы можете легко использовать вышеуказанный метод для использования Ordering.

0 голосов
/ 22 мая 2010

Collections.sort (map.values ​​(), myComparator);Создайте myComparator в качестве Comparator для сравнения объектов B по двойному полю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...