Я хочу сортировать HashMap по значениям. настоящее время я использую следующий кодСортировка LinkedHashMap в Java
public static Map<String, Float> sortByValue(Map<String, Float> unsorted_map){
Map<String, Float> sorted_map = new LinkedHashMap<String, Float>();
try{
// 1. Convert Map to List of Map
List<Map.Entry<String, Float>> list = new LinkedList<Map.Entry<String, Float>>(unsorted_map.entrySet());
// 2. Sort list with Collections.sort(), provide a custom Comparator
Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {
public int compare(Map.Entry<String, Float> o1,
Map.Entry<String, Float> o2) {
return (o1.getValue()).compareTo(o2.getValue());
}
});
// 3. Loop the sorted list and put it into a new insertion order Map LinkedHashMap
for (Map.Entry<String, Float> entry : list) {
sorted_map.put(entry.getKey(), entry.getValue());
}
}
catch(Exception e){
e.printStackTrace();
}
return sorted_map;
}
но выход неправильно. В частности, значения начинаются в порядке убывания, затем после значения 0.0 они становятся в порядке возрастания (как показывает второй столбец данных).
---> 1985 0.54660827
---> 2002 0.45290402
---> 1993 0.40605184
---> 2015 0.3591997
---> 2000 0.34358233
---> 1980 0.2811128
---> 2008 0.24987808
---> 1990 0.23426071
---> 1983 0.23426071
---> 1986 0.21864335
---> 1977 0.18740855
---> 1992 0.1717912
---> 2009 0.14055647
---> 2006 0.12493904
---> 2011 0.031234872
---> 2001 0.015617436
---> 1975 0.0
---> 1997 0.031234723
---> 2004 0.046852008
---> 1988 0.062469445
---> 2013 0.07808688
---> 1978 0.07808688
---> 2005 0.1093216
---> 1981 0.14055632
---> 1976 0.14055632
---> 2014 0.14055632
---> 1999 0.15617377
---> 1994 0.20302577
---> 1987 0.20302577
---> 2010 0.2186432
---> 1991 0.24987794
---> 1989 0.24987794
---> 1996 0.28111264
---> 2012 0.28111264
---> 2003 0.29673007
---> 1998 0.29673007
---> 2007 0.31234753
---> 1984 0.3904344
---> 1982 0.42166913
---> 1979 0.5309907
---> 1995 0.73401666
Кто-то может мне помочь?
Заранее благодарен!
Почему бы не использовать TreeMap рассортировывающие себя? – puhlen
@puhlen, потому что он сортируется по ключу, а не по значению. –
Эта реализация выглядит правильно для меня. Я честно подозреваю, что код, который вы используете, распечатывает карту или не назначает отсортированную карту каким-то образом, когда вы вызываете этот метод. –