2014-09-30 4 views
0

У меня есть list объектов, которые мне нужно отсортировать на основе string.Сортировка на основе строки java

каждый объект в списке будет содержать ниже

e.g. 
fruitType = Pear 
fruitType = Mango 
fruitType = Apple 
fruitType = Apple 
fruitType = Mango 

Теперь, скажем, я хочу заказать на «Apple» первый, а затем «Mango». Итак, яблоко появляется сверху, а затем манго.

Я могу сделать обычную сортировку asc/desc, но этого недостаточно. Также возможно использовать apache commons для выполнения вышеуказанного сортировки?

+7

Напишите свой собственный сопоставимый и используйте Treeset? И что вы имеете в виду, asc/desc недостаточно? – Dan

+0

Можете ли вы опубликовать то, что вы пробовали? Что означает список объектов? Являются ли они 'String', настраиваемые объекты или' Object'? – Narmer

+0

Если бы я должен был сортировать вышеуказанный список в порядке возрастания, я бы получил результат, который я хочу. Я хочу посмотреть пример того, как сортировать на основе определенной строки, чтобы она выталкивала элемент, который вы передаете ему вверху списка, без сортировки по asc/desc. (не уверен, что я схожу с неправильного пути с этим?) –

ответ

0
public class Fruit implements Comparable<Fruit> { 
    private String whatYouWantToSortBy; 
    ... 
    public int compareTo(Fruit other) { 
     return whatYouWantToSortBy.compareTo(other.whatYouWantToSortBy); 
    } 
} 

Сортировка, использование Collections.sort. Или вы можете просто использовать тип списка, который автоматически сортирует себя, например TreeSet.

0

Если вы хотите отсортировать по заранее определенном порядке (то есть, у вас есть некоторый фиксированный порядок строк в виду), то вы можете сделать это следующим образом:

  1. Настройка HashMap<String,Integer> sortTable. В него вы помещаете все свои строки и сопоставляете их по индексу в порядке сортировки. Если вы хотите сначала Apple, то Mango, затем Plum и т. Д., То вы можете добавить их: sortTable.put("Apple",0); sortTable.put("Mango",1); sortTable.put("Plum",2); и так далее.
  2. Теперь напишите свой Comparator следующим образом. Когда вы сравниваете два String экземпляров s и t, вы смотрите оба в своем HashMap и сравниваете их по значению, на которое они ориентируются. Поэтому, если вы сравниваете Apple и Plum, вы найдете Apple и найдите его на карте 0; вы найдете Plum и найдете его на карте 2; и вы тогда return Integer.compare(0,2).

Другими словами, ваш Comparator использует:

public int compare(String x, String y) { 
    return Integer.compare(sortTable.get(x), sortTable.get(y)); 
} 

Это позволит использовать Collections.sort в списке, передавая ему Comparator вы создали.

Обратите внимание, что вам нужна какая-либо политика для работы с String, которые не указаны в вашем предопределенном списке, или некоторые гарантии того, что этого не произойдет.

Смежные вопросы