2015-02-05 3 views
0

Пожалуйста, помогите мне решить эту проблему. Я уже пытался написать разные компараторы, и никто из них не работает должным образом.Компаратор ArrayList <Object> не работает должным образом

Они любят сортировать по частям. Пусть это будет, как значения: 0, 4, 1, 9 , 18, 3, 18, 9.

И сортирует так: 9, 9, 0, 1, 3, 18, 18, 4.

Некоторые «заказал» случайное, я бы сказал.

Пожалуйста, помогите найти то, что я сделал неправильно.

класса с данными и Comparator:

public class CoursesData { 
private String url; 
private String name; 
private String lessonsCount; 
private String isFree; 
private String price; 
private String language; 
private String difficulty; 

private AuthorData author; 

public static Comparator<CoursesData> CoursesDataPriceComparator = new Comparator <CoursesData>() { 
    public int compare (CoursesData left, CoursesData right){ 
     return right.getPrice().compareTo(left.getPrice()); 
    } 
}; 

....(getter-setters) 

И как я использую этот компаратор:

ArrayList<CoursesData> coursesDatas = parserJson.getCourses(); 
    Collections.sort(coursesDatas, CoursesData.CoursesDataPriceComparator); 
    mAdapter = new CoursesItemAdapter(getActivity(), 
      R.layout.catalog_list_item, coursesDatas); 

Цена является строка, но с цифрами значений. Возможно, это проблема ...

Спасибо за любую помощь.

+2

* Может быть, его проблема *. Это на самом деле. Вы можете использовать 'Integer.parseInt' для получения фактического' int' и сделать сравнение между этими – Blackbelt

ответ

1

Заменить

return right.getPrice().compareTo(left.getPrice()); 

с

return new Double(right.getPrice().trim()).compareTo(
    new Double(left.getPrice().trim()) 
); 
+2

. Я бы использовал Double вместо Integer, чтобы охватить весь диапазон номеров. – Serhiy