Решил задачу, но как я понял просто TreeSet без лишних методов для сортировки классов не годится. Выдает ошибку: cannot be cast to class java.lang.Comparable
.
Что можно использовать взамен TreeSet
.
/**
* В этом методе необходимо реализовать:
* 1. На вход получаем коллекцию пользователей
* 2. Удаляем все дубли (одинаковое имя и возраст)
* 3. Сортируем по имени и возрасту
* 4. Возвращаем последнего пользователя
*/
public static <T> User task1(Collection<User> source) {
Collection<User> users = new TreeSet<>(source);
Iterator<T> iterator = (Iterator<T>) users.iterator();
T lastElement = iterator.next();
while(iterator.hasNext()){
lastElement = iterator.next();
}
return (User) lastElement;
}
Изменения в класс вносить нельзя!
@Test
public void task1() {
List<User> users = Arrays.asList(new User("Ivan", 15), new User("Masha", 17), new User("Kolya", 23), new User("Denis", 7), new User("Vova", 45), new User("Marina", 15), new User("Kolya", 15), new User("Vova", 25), new User("Vlad", 26), new User("Ivan", 17));
User result = Lesson11to12_SetMap.task1(users);
Assertions.assertEquals("Vova", result.getName(), "В конце должен быть Vova, 45 лет");
Assertions.assertEquals(45, result.getAge(), "В конце должен быть Vova, 25 лет");
}
Сортировка по возрасту, аналогично делается и по имени
List<User> ulist = users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
У указанного класса есть конструктор TreeSet(java.util.Comparator), в который можно явным образом передать компаратор. Следовательно указанный код преобразится примерно в следующее:
Set<User> users = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(User s1, User s2) {
//тут надо реализовать сравнение
}
});
users.addAll(source);
После чего указанная ошибка должна перестать падать.
public static <T> User task1(Collection<User> source) {
return source.stream()
//Удаляем все дубли (одинаковое имя и возраст) - это отработает, только если у User переопределен метод equals корректно
.distinct()
//Сортируем по имени и возрасту
.sorted(Comparator.comparing(User::getName).thenComparing(User::getAge))
// Возвращаем последнего пользователя
.reduce((u1, u2) -> u2)
.orElseThrow(() -> new IllegalArgumentException("Source is empty"));
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Весь цикл записи и чтения работает на ура, но новые значения появляются снизу БД:
Такая проблема: в поставленной задаче требуется сделать вращение фигуры вокруг своего центра
Не думал что придется тратить на это время,но уже изрядно потрепался в поисках ответаИспользование spring