List排序、Map按照value值排序,以及list如何转换为map,map如何转换为list

本文详细介绍了如何在Java中对List进行升序和降序排序,以及如何按照Map的value值对Map进行降序排序并转换为List。通过实例代码展示了Collections.sort()方法的使用,并演示了如何将排序后的List转换回Map。对于Map的排序,首先将其entrySet转换为List,然后自定义比较器进行排序。最后,通过迭代器将排序后的List重新构建为Map。
摘要由CSDN通过智能技术生成

List排序、Map按照value值排序,以及list如何转换为map,map如何转换为list

在写算法的时候,会频繁的用到list以及map的排序问题,当我们想对list进行排序,我们可以直接使用Collections类中的方法,比如说对list进行降序排列,如下

Collections.sort(list,Collections.reverseOrder());

其中逗号前的list即为要排序的list,用一个例子来看,如图:

           list.add(0.3);
           list.add(0.4);
           list.add(0.5);
           list.add(0.6);
           list.add(0.7);
           System.out.println(list);
           Collections.sort(list,Collections.reverseOrder());

初始化不在这里定义了,运行结果如图:
在这里插入图片描述
同样,升序可以使用:

Collections.sort(list);

接下来是对map按照value值进行排序(降序),主要是先将map转化为list,再通过Collections类中的方法进行排序,代码如下:

List<Map.Entry<String, Double>> wordMap = new ArrayList<Map.Entry<String, Double>>(structureSimilarityDegree.entrySet());
Collections.sort(wordMap, new Comparator<Map.Entry<String, Double>>() {//根据value排序
public int compare(Map.Entry<String, Double> o1,
Map.Entry<String, Double> o2) {
double result = o2.getValue() - o1.getValue();
if(result > 0)
return -1;
else if(result == 0)
return 0;
else
return -1;
}
})

举例子进行验证:

           structureSimilarityDegree.put( list.get(0)+ "," , 0.93);
           structureSimilarityDegree.put( list.get(2)+ "," , 0.98);
           structureSimilarityDegree.put( list.get(3)+ "," , 0.99);
           structureSimilarityDegree.put( list.get(1)+ "," , 0.97);

运行结果如图:
在这里插入图片描述
正确运行,不过要注意的是,转换完之后为list类型,而不是map。如果我们想要用map进行操作,就需要将list类型转换为map类型,我通过使用迭代器,将list转换为map,代码如下:

                                Map sortedMap = new LinkedHashMap();
                               for (Iterator it = wordMap.iterator(); it.hasNext();) {
                                   Map.Entry entry = (Map.Entry)it.next();
                                    sortedMap.put(entry.getKey(), entry.getValue());
                                }

这样就将list成功转换为map,图中的sortedMap为转换后的map可以直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值