В дополнении к вопросу Что можно закастить в SortedSet?, нашел решение, но выдает другую ошибку! Почему, не могу понять...
Collection<User> users = new HashSet<>(source);
List<User> forReturn = new ArrayList<>(users);
forReturn.stream().sorted();
return forReturn.get(users.size() - 1);
Стрим так не работает. это все таки уже функционалка. Мало того, что стрим ленивый, так он еще выводит результат исключительно через терминальные вызовы, посему для вывода в лист он создаст вам новую коллекцию. Выглядит это так:
Collection<User> users = new HashSet<>(source);
List<User> forReturn = new ArrayList<>(users);
return forReturn.stream().sorted().collect(Collectors.toList()).get(users.size() - 1);
Однако, вы должны понимать, что это очень плохая идея. Вы ищите 1 элемент по определенному признаку, для этого сортировать нерационально, ибо ресурсозатратно. Мало того, если вы не имплеиментируете Comparable либо не напищите Comparator для класса User, то получите ошибку во всех случаях сортировки (именно поэтому вы получааете класскаст для сортированной коллекции).
Если вы хотите использовать стрим, то лучше сделать так
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class User {
private final String name;
private final Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "User{" + "name=" + name + ", age=" + age + '}';
}
public static void main(String[] args) {
final List<User> list = Arrays.asList(new User("Igor", 25), new User("Masha", 32), new User("Dasha", 22));
User user = list.stream().max(Comparator.comparing(User::getAge, Comparator.reverseOrder())).get();
System.out.println(user);
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости