Je veux atteindre ce qui suit, j'ai une collection de dates dans une forme de liste que je veux dédupliquées et triées. J'utilise collections.sort pour trier la liste dans l'ordre croissant des dates, puis en utilisant treeSet pour copier et dédoubler des éléments de la liste. C'est une approche à deux coups? Y a-t-il une approche plus rapide, en une étape? Fondamentalement, je veux commander l'objet Metadata basé sur le sourceDate et dédupliquer aussi.Trier et dedupe java collections
Répondre
Vous pouvez ignorer l'étape Collections#sort
: TreeSet
supprimera les doublons et triera les entrées. Donc, fondamentalement, il est une opération d'une ligne:
Set<Date> sortedWithoutDupes = new TreeSet<Date> (yourList);
Si la date est un champ dans votre objet, vous pouvez:
- ont votre objet de mettre en œuvre des objets Comparable et comparer en fonction de leur date
- ou passer un
Comparator<YourObject>
comme argument au constructeur TreeSet, dans les deux cas, trie vos objets par date
vous n'avez pas besoin d'effectuer une pré-tri yo ur liste.
REMARQUE IMPORTANTE:
TreeSet utilise compareTo
pour comparer les clés. Donc si 2 clés ont la même date mais des noms différents, vous devez vous assurer que votre méthode compare ou compareTo renvoie une valeur non-0, sinon les 2 objets seront considérés égaux et un seul sera inséré.
EDIT
Le code pourrait ressembler à ceci (non testé + vous devez gérer les valeurs NULL):
Comparator<Metadata> comparator = new Comparator<Metadata>() {
@Override
public int compare(Metadata o1, Metadata o2) {
if (o1.sourceDate.equals(o2.sourceDate)) {
return o1.name.compareTo(o2.name);
} else {
return o1.sourceDate.compareTo(o2.sourceDate);
}
}
};
Set<Metadata> sortedWithoutDupes = new TreeSet<Metadata> (comparator);
sortedWithoutDupes.addAll(yourList);
TreeSet triera automatiquement ses éléments, vous devriez donc pas besoin de trier les liste avant d'ajouter à l'ensemble.
Mais le constructeur de jeu d'arbres ne permet qu'une seule chose, soit la déduplication ou l'ordre et pas les deux. Comment puis-je faire cela en une seule fois car j'ai besoin de copier les éléments d'une liste existante? – Phoenix
Définit toujours dedupe, il est impossible pour eux de contenir des doublons - du moins c'est une exigence de l'interface. Ils le feront automatiquement avec n'importe quel constructeur ou toute opération d'ajout. –
- 1. Trier les collections en Java
- 2. aide de script dedupe
- 3. Collections Java
- 4. Tri Java avec collections et tri manuel
- 5. filtre et trier la liste en utilisant les collections google
- 6. Comment trier les collections dans Magento?
- 7. Collections Java: quelle collection utiliser et quand?
- 8. collections Java - prépondérants égaux et hashCode
- 9. Collections avancées en Java?
- 10. problème Java covariance collections
- 11. Collections filtrables en Java
- 12. Java Generics and Collections
- 13. collections interface java
- 14. java ... basé sur Collections
- 15. Java Collections & aliasing
- 16. Manipulation des collections Java
- 17. C# dedupe Liste basée sur la division
- 18. Java Collections par l'entrée de l'utilisateur
- 19. Trier les documents dans des collections pendant l'extraction
- 20. Quelle est la différence entre Collections et "Collections stockées" en Java? et pourquoi "stocké"?
- 21. Java/Scala (profond) collections interopérabilité
- 22. Java Collections Synchronisée vs objet
- 23. collections Java consommation de mémoire
- 24. java collections vs carte dans le framework de collections
- 25. Filtrage des collections dans Java
- 26. Comment trier ArrayList par ordre alphabétique en Java sans utiliser de collections?
- 27. Comment trier un résultat de requête par leur date (JPA, Java Collections)
- 28. Comment trier des collections profondément imbriquées avec ActiveRecord?
- 29. trier une liste à l'aide des collections provoque des erreurs
- 30. Comment trier un attribut d'un objet à l'aide des collections
Mais que se passe-t-il si la date est un champ dans mon objet? Puis treeets peut-il le classer par ordre croissant de dates? – Phoenix
@Phoenix C'est légèrement différent mais ça marche toujours - voir mon edit. – assylias