2013-04-09 2 views
-4

ArrayList для строки сортировки:ArrayList для струнного сортировки

public class Ooops<P, O> 
{ 
    private P po; 
    private O pa; 
    private int val; 
    public Preference(P p, O o, int v) 
    { 
     setPo(p); 
     setPa(o); 
     setValue(v); 
    } 
    //Getter and setter for Pa,Pa and val 
} 

Я создал объект этого класса

List<Ooops<String, String>> abc = new ArrayList<Oops<String, String>>(); 

Что-то подобное,

Xcf,PQR,8 
DBC,Pas,6 
LdC,PhR,3 

Становится

DBC,Pas,6 
LdC,PhR,3 
Xcf,PQR,8 

Я смущен, как я могу отсортировать объект на основе значения переменной po в объекте.

Любая помощь будет отличной.

+0

Разве вы не задали аналогичный вопрос несколько минут назад? – Smit

+0

@ Считать точно так же. И аналогичный час назад. Оба с принятыми ответами. – ddmps

+1

Спасибо !!! Это мне очень помогло !!! Ну для строки это не так, потому что он не работает, потому что я переопределяю метод. Поэтому я снова спросил его. – user1141584

ответ

0

Вы можете отсортировать список, используя метод Collections.sort с помощью специализированного Компаратора, добавив интерфейс. Сопоставимый с Oooops облегчит жизнь.

public class Ooops<P, O> implements Comparable<Ooops<P,O>> { 

    private P po; 
    private O pa; 

    @Override 
    public int compareTo(Ooops<P, O> o) { 
    return (po.toString()+pa.toString()).compareTo(o.po.toString()+o.pa.toString()); //Some common way to compare the two. 
    } 
} 

Collections.sort затем может использоваться для сортировки списка. Принуждение P и O к расширению Comparable сделало бы метод compateTo более управляемым.

ie;

public class Ooops<P extends Comparable<P>, O extends Comparable<O>> implements Comparable<Ooops<P,O>> { 

    private P po; 
    private O pa; 

    @Override 
    public int compareTo(Ooops<P, O> o) { 
    if (po.compareTo(o.po) == 0) 
     return pa.compareTo(o.pa); 
    else 
     return po.compareTo(o.po); 
    } 
} 

Альтернативой изменениям Ooops является создание пользовательского компаратора;

ArrayList<Ooops<String, String>> abc = new ArrayList<Ooops<String, String>>(); 
Collections.sort(abc, new Comparator<Ooops<String, String>>(){ 

    @Override 
    public int compare(Ooops<String, String> o1, Ooops<String, String> o2) { 
    return 0; //Compare the two. 
    } 

}); 
Смежные вопросы