Нет смысла говорить о порядке в несортированном множестве.Вы должны использовать что-то вроде TreeSet
, если хотите, чтобы набор упорядочивался по возрасту.
Comparator<User> byAge = Comparator.comparingInt(User::getAge);
Supplier<TreeSet<User>> user = () -> new TreeSet<User>(byAge);
TreeSet<User> userSet = users.stream().collect(Collectors.toCollection(user));
Если приведенный выше код вам не нравится, вы также можете просто добавить свой текущий набор пользователей в TreeSet
, но будет еще один шаг копирования.
Основное различие между использованием TreeSet
и LinkedHashSet
связано с поддержанием порядка сортировки.При TreeSet
при добавлении новых пользователей сортировка будет поддерживаться.При LinkedHashSet
добавление новых пользователей может нарушить порядок сортировки по возрасту, поскольку LinkedHashSet
поддерживает только порядок вставки.
Редактировать:
На основе комментариевсогласно @Federico ниже, фактический TreeSet
будет использовать свой компаратор для определения равенства User
объектов.Если вы хотите сначала удалить всех дублирующихся пользователей с помощью метода equals()
, то мы можем сначала добавить всех пользователей в HashSet
, а затем использовать описанный выше подход для добавления их в TreeSet
.
Set<User> set = new HashSet<>(users); // remove duplicates via equals
TreeSet<User> userSet = set.stream().collect(Collectors.toCollection(user));