如何使用google集合排序函数</key,>对Java中的值进行Map <key,value =“”>排序

时间:2010-05-22 19:15:54

标签: java guava

如果B是一个类,有一个类型为double的字段,应该用于排序,如何使用google集合排序函数对Java中的值进行排序(?,B)。

2 个答案:

答案 0 :(得分:4)

这是一个使用通用方法的代码段,该方法使用Map<K,V>Comparator<? super V>,并使用比较器返回值SortedSet的{​​{1}}。

entrySet()

在Google订购

  

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

     

返回预先存在的比较器的排序。

上述解决方案使用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]" } } ,因此您可以轻松使用上述方法代替使用Comparator

答案 1 :(得分:-3)

Collections.sort(map.values(),myComparator); 将myComparator创建为Comparator,以便通过双字段比较B对象。