Java Сортировать Guava TreeBasedTable - PullRequest
       21

Java Сортировать Guava TreeBasedTable

3 голосов
/ 09 августа 2011

У меня есть TreeBasedTable объект из Гуавы (коллекции Gooogle).Это в форме TreeBasedTable<k1, k2, v>.k1 и k2 орудие Comparable.Теперь, когда я отображаю таблицу, я хочу, чтобы пользователь мог сортировать ее различными способами, чтобы изменить порядок значений.

Подход, который я пробовал, состоял в том, чтобы перебрать таблицу и для каждого значения изменитьпеременная, которая используется в методе сравнения.Проблема в том, что он проходит через цикл один раз, а затем возвращает NullPointerException, что, я думаю, я сузил до попытки изменить порядок во время итерации по нему (ошибка новичка, я знаю).

Поэтому мне было интересно, что было бы хорошим способом изменить порядок этой таблицы?

Ответы [ 3 ]

3 голосов
/ 09 августа 2011

Как насчет того, чтобы просто создать новый TreeBasedTable, созданный с использованием другого объекта сравнения, а затем скопировать в него оригинал с помощью открытого метода putAll? Положения для каждого элемента будут принимать log (N), поэтому общее время должно быть N log (n), что примерно соответствует времени, которое я ожидал бы для повторной сортировки.

3 голосов
/ 09 августа 2011

Вы должны воссоздать TreeBasedTable и предоставить ему другой Comparator.Пожалуйста, смотрите документацию по гуаве .Также обратите внимание, что для этого используются деревья, которые должны быть отсортированы с соответствующим компаратором (когда вы строите дерево, компаратор известен, так что дерево строится определенным образом).Предоставление другого компаратора приведет к созданию нового дерева.Если это нежелательное поведение для вас, вам следует подумать об использовании другой структуры данных.

0 голосов
/ 09 августа 2011

Используйте TreeBasedTable.create(TreeBasedTable<R, C, ? extends V>), чтобы создать новый из предыдущего после того, как вы изменили свой компаратор, переключив один из его флагов

...