我有这样的地图:
Map<String, TC> mapToSort= new HashMap<String, TC>();
该值是一个类:
class TC {
private int a;
public TC(int a) {
this.a = a;
}
//getters-setters
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
我想要对这个地图进行排序,不是通过键(使用TreeMap很容易),而是通过TC类中的字段“a”变量。因此,具有最高“a”值的元素应位于mapToSort之上。 是否有任何内置或其他优雅的解决方案来实现这一目标?
答案 0 :(得分:0)
通过您的类实现Comparable,然后将它们放在TreeSet中
class TC implements Comparable<TC> {
private int a;
public TC(int a) {
this.a = a;
}
//getters-setters
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
@Override
public int compareTo(TC tc){
return this.a-tc.getA();
}
}
答案 1 :(得分:0)
将TreeMap与自定义Comparator用于键。在关键对象中,保留指向值对象的链接。实现比较器以按值进行比较,而不是按键进行比较。在你的情况下,你必须用以下内容包装一个字符串:
class Key{
public Key(String key, TC value)
{
this.key = key;
this.value = value;
}
String key;
TC value;
}
答案 2 :(得分:0)
这样的事情将为您提供值的排序列表。
List sortValues(Map mapToSort)
{
List values = new ArrayList(mapToSort.values());
Comparator<TC> tcComparator = new Comparator<TC>
{
public int compare(TC tc1, TC tc2)
{
return tc1.getA() - tc2.getA();
}
};
Collections.sort(values, tcComparator);
return values;
}