我正在寻找排序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方法同时工作.