У меня есть таблица с lat, long, название местоположения. Я вычислил ближайшее расстояние от текущего местоположения и добавил расстояние в одном массиве, а затем отсортировано в порядке возрастания. Далее я добавил имя в другой arraylist. Теперь мне нужно установить имена в порядке, используя расстояние от другого списка. Как это сделать?сортировка arraylist using другой arraylist
ответ
Почему бы не построить непосредственно TreeMap с расстоянием как ключ и имя в качестве значения. Таким образом, они всегда будут сортироваться по дистанции.
Ваши расстояния рассчитываются по широте, долготе в этой таблице? то почему бы не использовать структуру данных карты?
предоставляет вам пару местоположения расстояние
Вероятно, у вас есть некоторый класс, который содержит широту, долготу и название местоположения. Вы можете поместить объекты этого класса в TreeSet
, где компаратор имеет текущее местоположение в качестве аргументов конструктора и вычисляет расстояния для сравнения.
Я думаю, что вы слишком широко используете массивы. Если у вас есть две или более части связанных данных, вы не должны помещать каждую часть в отдельный массив. Вместо этого создайте класс для хранения всех связанных данных (lat, long, distance и name) и получите массив (или некоторую другую коллекцию, которая лучше соответствует вашим потребностям, например SortedList), который содержит экземпляры этого класса. Класс может реализовать Comparable с использованием расстояния в качестве меры и, следовательно, позволяет сортировать по расстоянию.
gr8 ans ... Это то, что я сделал в подобной ситуации !!! – aProgrammer
использование Arrays.sort(). Вы даже не можете добавить расстояние от каждого в отдельном массиве. просто реализуйте компаратор правильно.
используйте это после выполнения toArray()
на вашем ArrayList
.
Точка вопроса заключалась в том, как связать массив имен с массивом расстояний (который был отсортирован). –
TreeMap с дистанционным ключом - хорошая идея, но что делать, если есть 5 записей с одинаковым расстоянием? – Kent
Хмм, хорошая точка. :) – Tudor