按值和键显示树形图

时间:2011-10-22 10:31:43

标签: java treemap

我正在使用Map.entrySet()显示按键排序的TreeMap。但是,我想显示按值和键排序的内容。这可能吗?如果是这样的话,我该怎么办呢?

编辑:改述:

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

2 个答案:

答案 0 :(得分:2)

我不确切知道你想要实现什么 - TreeMap中的键是唯一的,因此如果你按键对内容进行排序,按值排序是没有意义的。如果您想要两个列表,一个按键排序,另一个按值排序,您可以使用两个TreeMaps或使用特殊容器,例如Bimap

答案 1 :(得分:1)

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

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);
    }
}

结果:

A=A
C=A
D=A
B=B
E=B
F=C