Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按值和键显示树形图_Java_Treemap - Fatal编程技术网

Java 按值和键显示树形图

Java 按值和键显示树形图,java,treemap,Java,Treemap,我正在使用Map.entrySet()显示当前按键排序的树状图。但是,我希望显示按值和键排序的内容。这可能吗?如果是的话,我该怎么办 编辑:重新措辞: 我目前正在显示一个按键排序的树状图。我最初希望按值排序显示,但如果值相同,我希望按升序显示键。我不知道您想要实现什么-树状图中的键是唯一的,因此如果按键排序内容,则按值排序没有意义。如果您希望有两个列表,一个按键排序,另一个按值排序,您可以使用两个树形图或使用特殊容器,例如。使用比较器对地图中的条目对象进行排序 public class MyCo

我正在使用Map.entrySet()显示当前按键排序的树状图。但是,我希望显示按值和键排序的内容。这可能吗?如果是的话,我该怎么办

编辑:重新措辞:


我目前正在显示一个按键排序的树状图。我最初希望按值排序显示,但如果值相同,我希望按升序显示键。

我不知道您想要实现什么-树状图中的键是唯一的,因此如果按键排序内容,则按值排序没有意义。如果您希望有两个列表,一个按键排序,另一个按值排序,您可以使用两个树形图或使用特殊容器,例如。

使用比较器对地图中的条目对象进行排序

public class MyComparator implements Comparator<Entry<String, String>> {
    @Override
    public int compare(Entry<String, String> left, Entry<String, String> right) {
        int valueComp = left.getValue().compareTo(right.getValue());
        if (valueComp != 0)
            return valueComp;
        int keyComp = left.getKey().compareTo(right.getKey());
        return keyComp;
    }
}

@Test
public void testSorting() throws Exception {
    Map<String, String> tree = new TreeMap<String, String>();
    tree.put("D", "A");
    tree.put("A", "A");
    tree.put("F", "C");
    tree.put("E", "B");
    tree.put("C", "A");
    tree.put("B", "B");
    Set<Entry<String, String>> entrySet = tree.entrySet();
    Comparator<? super Entry<String, String>> comparator = new MyComparator();
    TreeSet<Entry<String, String>> sorted = new TreeSet<Entry<String, String>>(comparator);
    sorted.addAll(entrySet);
    for (Entry<String, String> entry : sorted) {
        System.out.println(entry);
    }
}

我希望输出是按值排序的树映射,但值并不都是唯一的,因此当值相同时,共享相同值的键将被排序。然后您可以读取键-值对(Map.Entry对象),将它们存储在ArrayList中,并使用仅比较值的自定义比较器对其排序。
A=A
C=A
D=A
B=B
E=B
F=C