Java. Сортировки коллекций
Рассмотрим сортировки объектов в Java:
Методы:
1.sort
2.reversed
3.thenComparing
4.Collections.sort
public class User {
private String userName;
private int userAge;
public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}
public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Ivan", 34));
users.add(new User("Alex", 35));
users.add(new User("Max", 21));
users.add(new User("Tom", 45));
users.add(new User("Richard", 52));
users.add(new User("Donald", 19));
return users;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userAge=" + userAge +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return userAge == user.userAge &&
Objects.equals(userName, user.userName);
}
@Override
public int hashCode() {
return Objects.hash(userName, userAge);
}
}
Наша коллекция:
[User{userName='Donald', userAge=19},
User{userName='Max', userAge=21},
User{userName='Ivan', userAge=34},
User{userName='Alex', userAge=35},
User{userName='Tom', userAge=45},
User{userName='Richard', userAge=52}]
1. sort - сортировка по интерфейсу Comparator
Пример:
Сортировка по возрасту по возрастанию:
List<User> users = User.getUsers();
users.sort(Comparator.comparing(User::getUserAge));
System.out.println(users);Вывод:[User{userName='Donald', userAge=19},
User{userName='Max', userAge=21},
User{userName='Ivan', userAge=34},
User{userName='Alex', userAge=35},
User{userName='Tom', userAge=45},
User{userName='Richard', userAge=52}]
2. reversed - сортировка по убыванию:
Пример:List<User> users = User.getUsers();
users.sort(Comparator.comparing(User::getUserAge).reversed());
System.out.println(users);Вывод:[User{userName='Richard', userAge=52},
User{userName='Tom', userAge=45},
User{userName='Alex', userAge=35},
User{userName='Ivan', userAge=34},
User{userName='Max', userAge=21},
User{userName='Donald', userAge=19}]3. thenComparing - сначала сортируем по возрасту,
потом по имени в обратном порядке:List<User> users = User.getUsers();
users.sort(Comparator.comparing(User::getUserAge).thenComparing(User::getUserName).reversed());
System.out.println(users);4. Также у класса Collections есть метод sort:
Можно создать класс UsersSortComparator:public class UsersSortComparator {
public static Comparator<User> BY_AGE =Comparator.comparing(User::getUserAge);
public static Comparator<User> BY_AGE_DESC =BY_AGE.reversed();
}Ну и делать сортировки по убыванию и возрастанию:List<User> users = User.getUsers();
Collections.sort(users, UsersSortComparator.BY_AGE);
System.out.println(users);
Collections.sort(users, UsersSortComparator.BY_AGE_DESC);
System.out.println(users);Но все-таки запись:
users.sort(UsersSortComparator.BY_AGE_DESC);
Намного легче для восприятия, чем:Collections.sort(users, UsersSortComparator.BY_AGE_DESC);А используя статический импорт, код становится еще проще:users.sort(BY_AGE);
Комментарии
Отправить комментарий