java map按值排序_Java Map按值排序

我正在寻找排序Map< String,Integer>的方法.按值.我发现了

this post,它解决了我的排序问题,但并不完全.根据帖子,我写了以下代码:

import java.util.*;

public class Sort {

static class ValueComparator implements Comparator {

Map base;

ValueComparator(Map base) {

this.base = base;

}

@Override

public int compare(String a,String b) {

if (base.get(a) >= base.get(b)) {

return 1;

} else {

return -1;

}

}

}

public static void main(String[] args) {

HashMap map = new HashMap();

ValueComparator vc = new ValueComparator(map);

TreeMap sorted = new TreeMap(vc);

map.put("A",1);

map.put("B",2);

sorted.putAll(map);

for (String key : sorted.keySet()) {

System.out.println(key + " : " + sorted.get(key)); // why null values here?

}

System.out.println(sorted.values()); // But we do have non-null values here!

}

}

A : null

B : null

[1,2]

BUILD SUCCESSFUL (total time: 0 seconds)

从输出可以看出,get方法总是返回null.原因是我的ValueComparator.compare()方法永远不会返回0,我已经通过制作了this post.

有人建议在那篇文章中,以下解决空值问题:

public int compare(String a,String b) {

if (base.get(a) > base.get(b)) {

return 1;

}else if(base.get(a) == base.get(b)){

return 0;

}

return -1;

}

我已经测试了这段代码,并引入了一个关键的合并问题.换句话说,当这些值相等时,它们的相应键被合并.

我也试过以下:

public int compare(String a,String b) {

if (a.equals(b)) return 0;

if (base.get(a) >= base.get(b)) {

return 1;

} else return -1;

}

它也不工作.一些值仍为空.此外,此解决方法可能存在逻辑问题.

任何人都可以为我的问题提出一个全面的解决方案?我希望通过value函数进行排序,并且get方法同时工作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值