gpt4 book ai didi

java - 在 Java 中对 LinkedHashMap 进行排序

转载 作者:行者123 更新时间:2023-12-01 21:18:28 26 4
gpt4 key购买 nike

我想按值对 HashMap 进行排序。我目前正在使用以下代码

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

有人可以帮助我吗?

提前致谢!

最佳答案

排序代码正常。你的打印似乎失败了。检查负数打印。

尝试使用 Stream API 进行排序

LinkedHashMap<String, Integer> map 
= unsorted_map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Integer::compareTo))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> a,
LinkedHashMap::new
));

收集器使用“take one”碰撞解析器按身份创建 LinkedHashMap 节点。

关于java - 在 Java 中对 LinkedHashMap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com