J'ai 2 objets: J'ai une collection d'entre eux: p> avant de commencer à travailler sur _listvalues em> strong> J'ai besoin de trier les objets: p> Cela ressemble à ceci maintenant: P> _ListValues [0] -> AdresseObject "adresse C" p>
_Listvalues [1] -> AdresseObject "adresse B" p>
_Listvalues [2] -> Groupobject "B-Group" P>
_ListValues [3] -> AdresseObject "A-Adresse" P>
_Listvalues [4] -> Groupobject "A-Group" P>
_ListValues [5] -> AdresseObject "D-Adresse" P>
BlockQuote> Cela devrait ressembler à ceci: p> _ListValues [0] -> Groupobject "A-Group" P>
_Listvalues [1] -> Groupobject "B-Group" P>
_ListValues [2] -> AdresseObject "A-Adresse" P>
_Listvalues [3] -> AdresseObject "adresse B" p>
_ListValues [4] -> AdresseObject "adresse C" p>
_ListValues [5] -> AdresseObject "D-Adresse" P>
blockQuote> Comment puis-je trier les
3 Réponses :
Vous pouvez utiliser liste # Trier code>:
_listValues.sort((o1, o2) -> {
if (o1 instanceof GroupObject && o2 instanceof AddressObject) {
return 1;
} else if (o1 instanceof AddressObject && o2 instanceof GroupObject) {
return -1;
} else if (o1 instanceof GroupObject && o2 instanceof GroupObject) {
GroupObject g1 = (GroupObject) o1;
GroupObject g2 = (GroupObject) o2;
return g1.getName().compareTo(g2.getName());
} else {
AddressObject a1 = (AddressObject) o1;
AddressObject a2 = (AddressObject) o2;
return a1.getName().compareTo(a2.getName());
}
});
Merci. Cela a aidé d'une manière mais ne met pas nécessairement la regroupement en haut de la liste, si le premier objet de la liste non formée n'est pas un groupe de groupe. J'ai posté une réponse "plus lourde".
Je l'ai résolu en se fractionnant dans des listes plus petites, trier et concéder à nouveau. Cela peut également aider pour des collections plus complexes aussi.
Vous pouvez également choisir quel objet doit également être en haut de la liste. p>
Une solution plus robuste pourrait être de laisser les classes implémenter une interface commune, appelons-le Vos cours ressembleraient à ceci: p> et le tri serait aussi simple que: p> étant donné que triable code>:
_listvalues code> est de type
Liste
Créez un comparateur personnalisé et utilisez une méthode de tri Build-in. Sinon, vous pouvez écrire votre propre méthode de tri.