Création d'un ensemble tout en utilisant les flux triés

mains:

J'ai un utilisateur classe avec le nom, le type et l' âge , puis une longue liste de ces utilisateurs sont mes entrées List<User> users = db.getUsers();.

Je suis en train de créer un ensemble de tous les utilisateurs uniques de cela, mais le problème est que je suis à la recherche pour les classer en fonction de l' âge aussi. J'ai actuellement utilisé-

Set<User> set = users.stream().collect(Collectors.toSet());

Comment trier cet ensemble en même temps que bien, une idée?

Tim Biegeleisen:

Il n'a pas de sens de parler de l' ordre dans un ensemble non trié. Vous devez utiliser quelque chose comme TreeSetsi vous voulez un ensemble ordonné par âge.

Comparator<User> byAge = Comparator.comparingInt(User::getAge);

Supplier<TreeSet<User>> user = () -> new TreeSet<User>(byAge);

TreeSet<User> userSet = users.stream().collect(Collectors.toCollection(user));

Si le code ci - dessus vous être laid, vous pouvez également ajouter simplement votre jeu actuel d'utilisateurs à un TreeSet, mais il y aurait une étape de copie.

La principale différence entre l' utilisation d' un TreeSetet LinkedHashSetdoit faire avec maintien de l' ordre de tri. Avec un TreeSet, lors de l' ajout de nouveaux utilisateurs, le tri serait maintenue. Avec un LinkedHashSet, l' ajout de nouveaux utilisateurs pourrait briser l'ordre de tri selon l' âge, parce LinkedHashSetmaintient que l' ordre d'insertion.

Éditer:

Sur la base des observations formulées par @Federico ci - dessous, une TreeSetréelle utiliserait son comparateur pour déterminer l' égalité des Userobjets. Si vous voulez d' abord supprimer tous les utilisateurs en double au moyen de la equals()méthode, nous pouvons d' abord ajouter tous les utilisateurs à un HashSet, puis utiliser l'approche ci - dessus pour les ajouter à un TreeSet.

Set<User> set = new HashSet<>(users);   // remove duplicates via equals
TreeSet<User> userSet = set.stream().collect(Collectors.toCollection(user));

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=177169&siteId=1
conseillé
Classement