Как отсортировать карту (?, B) по значениям в Java с помощью функции упорядочения коллекций Google, если B - это класс, который имеет поле типа double, которое следует использовать для упорядочения.
Как отсортировать карту «Ключ, значение» по значениям в Java с помощью функции упорядочивания коллекций Google
Ответы (2)
Вот фрагмент, который использует универсальный метод, который принимает 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 Заказе
public static <T> Ordering<T> from(Comparator<T> comparator)
Возвращает порядок для ранее существовавшего компаратора.
В приведенном выше решении используется Comparator
, поэтому вы можете легко использовать описанный выше метод для использования вместо него Ordering
.
person
polygenelubricants
schedule
22.05.2010
класс упорядочения возвращает список, как создать ImmutableSortedMap из этого списка?
- person user326667; 23.05.2010
@chris-gr: у вас не может быть
SortedMap<K,V>
, который сортируется по V
. Это нарушает SortedMap
контракт. См. stackoverflow.com/questions/2864840/treemap-sort-by- значение Лучшее, что вы можете сделать, это создать ImmutableSortedSet
из SortedSet<Map.Entry<K,V>>
- person polygenelubricants; 23.05.2010
Collections.sort(map.values(), myComparator); Создайте myComparator как Comparator для сравнения объектов B по двойному полю.
person
duduamar
schedule
22.05.2010
-1 Collections.sort(..) требует список, а map.values() возвращает коллекцию. Это не скомпилируется.
- person whiskeysierra; 23.05.2010
keySet()
возвращались в отсортированном порядке, или вы просто хотите временно отсортировать значения? - person Carl   schedule 23.05.2010