Сортировка по всем полям в списке - PullRequest
0 голосов
/ 19 марта 2020
import java.util.Date;

public class Emp {
    public Emp() {
    }

    private int Id;
    private String name;
    private Date date_of_join;
    private String city;
    private int age;
    public int getId() {
        return Id;
    }
    public void setId(int id) {
        Id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getDate_of_join() {
        return date_of_join;
    }
    public void setDate_of_join(Date date_of_join) {
        this.date_of_join = date_of_join;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

У меня есть бин с 5 полями. Я хочу отсортировать все пять полей в соответствии с 1, чем 2, чем 3, чем 4 и, чем 5

Он состоит из

String String, Date, String, Int.

Что я могу сделать, чтобы отсортировать list<Emp> внутри списка по идентификатору, имени, дате присоединения, городу, возрасту

1 Ответ

2 голосов
/ 19 марта 2020

Вы создаете пользовательский Comparator:

myList.sort(Comparator.comparingInt(Emp::getId)
                      .thenComparing(Emp::getName)
                      .thenComparing(Emp::getDate_of_join)
                      .thenComparing(Emp::getCity)
                      .thenComparingInt(Emp::getAge));

РЕДАКТИРОВАТЬ: Чтобы удовлетворить требование в комментариях, вы можете отсортировать элементы по длине строки города перед сортировкой по ней:

myList.sort(Comparator.comparingInt(Emp::getId)
                      .thenComparing(Emp::getName)
                      .thenComparing(Emp::getDate_of_join)
                      .thenComparingInt(e -> e.getCity().length())
                      .thenComparing(Emp::getCity)
                      .thenComparingInt(Emp::getAge));
...