Java 对树形图条目进行排序

Java 对树形图条目进行排序,java,collections,comparator,Java,Collections,Comparator,我有一个树状图和一个关键竞争对手的作品: Map<String, Long> movieReviewsTreeMap = new TreeMap<String, Long>(new MyComperator()); class MyComperator implements Comparator<String>{ @Override public int compare(String s1, String s2) { retu

我有一个树状图和一个关键竞争对手的作品:

Map<String, Long> movieReviewsTreeMap = new TreeMap<String, Long>(new MyComperator());

class MyComperator implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        }
Map movieReviewsTreeMap=newtreemap(new MyComperator());
类MyComperator实现比较器{
@凌驾
公共整数比较(字符串s1、字符串s2){
返回s1.compareTo(s2);
}
}
我试图修改Comparator以比较TreeMap条目。 我的目标是按值(从高到低)和键(如果两个值相等)对树映射进行排序


谢谢。

您只能在
java.util.TreeMap
中对键进行排序,但您可以扩展它并覆盖使用comparator实现某些附加逻辑的方法

你也可以尝试一些类似的方法来满足你的要求

import java.util.*;
import java.util.Map.Entry; 

public  class TestCollection13{

    public static void main(String args[]){

        Map<MyComperator, Long> movieReviewsTreeMap = new TreeMap<MyComperator, Long>(new MyComperator());

        Long l1 = new Long(5);
        movieReviewsTreeMap.put(new MyComperator("a", l1),l1);

        Long l2 = new Long(2);
        movieReviewsTreeMap.put(new MyComperator("a", l2),l2);

        Long l3 = new Long(6);
        movieReviewsTreeMap.put(new MyComperator("a", l3),l3);

        Long l4 = new Long(0);
        movieReviewsTreeMap.put(new MyComperator("a", l4),l4);

        for(Entry<MyComperator, Long> entry : movieReviewsTreeMap.entrySet()){
            System.out.println("Key : " + entry.getKey().getKey() +  " , value :" + entry.getValue());
        }

    } 
}


class MyComperator implements Comparator<MyComperator>{

    String key;
    Long value;

    MyComperator(){

    }

    MyComperator(String key, Long value){
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public Long getValue() {
        return value;
    }

    public void setValue(Long value) {
        this.value = value;
    }

    @Override
    public int hashCode() {
        return this.key.length();
    }

    @Override
    public boolean equals(Object obj) {

        MyComperator mc = (MyComperator)obj;

        if(mc.getKey().equals(this.getKey())  && mc.getValue().equals(this.getValue())){
            return false;
        }

        // TODO Auto-generated method stub
        return super.equals(obj);
    }

    @Override
    public int compare(MyComperator o1, MyComperator o2) {

        if(o1.getKey().equals(o2.getKey())){
            return o1.getValue().compareTo(o2.getValue());
        }

        return 0;
    }

}

树映射按定义按键排序,这就是java中树映射的工作方式(也是比较器只看到键的原因)。如果您想按不属于键的内容(即值)进行排序,则需要将其提取到另一个结构中并在那里进行排序。
Key : a , value :0
Key : a , value :2
Key : a , value :5
Key : a , value :6