У меня в приложении есть список сообщений (входящие и исходящие) и я хочу их сортировать по возможности по трем параметрам: текст сообщения, отправитель и тема. Если никакой сортировки не выбрано то просто выводить список всех несортированных сообщений.
Эта сортировка будет находится в Spinner где будут все параметры сортировки. Я нашел способ сортировки. Но у меня получается сортировать только по одному параметру, например по отправителю, а мне нужно сделать так чтобы была возможность менять фильтр. Вот что я нашел:
Класс для сортировки:
public class DateSort implements Comparator <Message> {
@Override
public int compare(Message message, Message t1) {
return message.getSender_name().compareTo(t1.getSender_name());
}
}
и дальше вот как его использовать для сортировки:
List<DataEntity> data= new ArrayList<DataEntity>();
DateSort ds = new DateSort();
try{Collections.sort(data, ds);}
catch(Exception es){};
все работает так как нужно, но есть один вопрос - нужно ли мне будет создавать несколько классов сортировки для того чтобы сделать все нужные мне фильтры или же можно сделать все в пределах одного класса? Потому-что я вот пробовал создавать еще один метод compare
для других параметров и у меня не получилось.
Может у кого-то есть более нормальный метод сортировки списка, буду рад если любым советам и помощи.
Если вам надо сортировать по нескольким полям за раз, то можно использовать: thenComparing
. Вот примерный код:
import java.util.ArrayList;
import java.util.Comparator;
class Person {
int age;
String name;
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
class CompareByAll implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.age - o2.age;
}
}
class CompareByName implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.name.compareTo(o2.name);
}
}
public class teTCompare {
public static void main(String[] args) {
teTCompare qwe = new teTCompare();
Person p1 = new Person();
p1.age = 10;
p1.name = "123";
Person p2 = new Person();
p2.age = 10;
p2.name = "223";
Person p3 = new Person();
p3.age = 10;
p3.name = "323";
Person p4 = new Person();
p4.age = 10;
p4.name = "023";
Person p5 = new Person();
p5.age = 50;
p5.name = "-123";
ArrayList<Person> asd = new ArrayList<>(5);
asd.addAll(Arrays.asList(p1, p2, p3, p4, p5));
asd.sort(new CompareByAll().thenComparing(new CompareByName()));
System.out.println(asd);
}
}
Результат будет:
[Person{age=10, name='023'}, Person{age=10, name='123'}, Person{age=10, name='223'}, Person{age=10, name='323'}, Person{age=50, name='-123'}]
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как делать запросы и их обрабатывать - я разобрался
Пытаюсь внедрить spinner у себя в приложенииВ списке есть три пункта, и по непонятной мне причине воспринимается выбор только 2,3 если начинать...
Есть 3 буквы на входе "А В В" Нужно вывести в консоль? Так должна выглядеть буква
Когда я пытаюсь присвоить одно событие onTextChanged к одному EditText, чтобы значение из этого EditText записалось в другой EditText, всё работает хорошоНо...