0
votes

Tri de la liste d'objet par type d'objet en Java

J'ai 2 objets: xxx

J'ai une collection d'entre eux: xxx

avant de commencer à travailler sur _listvalues ​​ J'ai besoin de trier les objets:

  1. Tous les regroupements doivent être supérieurs de la liste, AdresseObjects devraient venir après GroupObjects
  2. à l'intérieur de cette commande, les regroupements doivent être triés par nom propriété, ainsi que AdresseObjects.

    Cela ressemble à ceci maintenant:

    _ListValues ​​[0] -> AdresseObject "adresse C"

    _Listvalues ​​[1] -> AdresseObject "adresse B"

    _Listvalues ​​[2] -> Groupobject "B-Group"

    _ListValues ​​[3] -> AdresseObject "A-Adresse"

    _Listvalues ​​[4] -> Groupobject "A-Group"

    _ListValues ​​[5] -> AdresseObject "D-Adresse"

    Cela devrait ressembler à ceci:

    _ListValues ​​[0] -> Groupobject "A-Group"

    _Listvalues ​​[1] -> Groupobject "B-Group"

    _ListValues ​​[2] -> AdresseObject "A-Adresse"

    _Listvalues ​​[3] -> AdresseObject "adresse B"

    _ListValues ​​[4] -> AdresseObject "adresse C"

    _ListValues ​​[5] -> AdresseObject "D-Adresse"

    Comment puis-je trier les _listvalues ​​ afin d'atteindre cela?


1 commentaires

Créez un comparateur personnalisé et utilisez une méthode de tri Build-in. Sinon, vous pouvez écrire votre propre méthode de tri.


3 Réponses :


1
votes

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());
        }
    });


1 commentaires

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".



0
votes

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. xxx


0 commentaires

0
votes

Une solution plus robuste pourrait être de laisser les classes implémenter une interface commune, appelons-le triable : xxx

Vos cours ressembleraient à ceci: xxx

et le tri serait aussi simple que: xxx

étant donné que _listvalues ​​ est de type Liste .


0 commentaires