Отображение древовидной карты по значениям и ключам - PullRequest
1 голос
/ 22 октября 2011

Я отображаю TreeMap, отсортированный по ключам в настоящее время с помощью Map.entrySet ().Однако я хочу отобразить содержимое, отсортированное по значениям и ключам.Это возможно?Как бы я поступил, если бы это было?

РЕДАКТИРОВАТЬ: Перефразируя:

В настоящее время я отображаю древовидную карту, отсортированную по ключам.Сначала я хочу отобразить его отсортированным по значениям, но если значения совпадают, я хочу, чтобы ключи отображались в порядке возрастания.

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Я не знаю точно, чего вы пытаетесь достичь - ключи в TreeMap уникальны, поэтому, если вы сортируете содержимое по ключам, сортировка по значениям не имеет смысла.Если вы хотите иметь два списка, один отсортированный по ключам, а другой по значениям, вы можете использовать два TreeMaps или использовать специальный контейнер, такой как Bimap .

1 голос
/ 22 октября 2011

Используйте Comparator для сортировки Записи объектов на вашей карте.

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
...