10
votes

Trier Java en fonction de deux colonnes

permet de dire que j'ai une table comme ceci: xxx

Ce que je voudrais obtenir est de table comme ceci: xxx

première chose qui se produit est en trimes basé sur la colonne int1 .

Deuxième chose qui se passe est en quelque sorte basé sur la colonne int2 mais uniquement sur des lignes qui ont les mêmes numéros dans Colonne int1

Comment dois-je aborder ce problème sans utiliser de moteur de base de données?


1 commentaires

Pourquoi ne pas simplement écrire votre propre comparète ()? Est-ce stocké dans une base de données?


7 Réponses :


10
votes

Vous le feriez normalement avec une liste <élément> élément est un type contenant toutes les trois valeurs ("FOO", 5, 0 pour la première rangée , par exemple).

vous écrivez alors un comparateur <élément> qui comparé les valeurs INT1 des deux objets objets présentés dans comparer , et si cela a donné une réponse définitive, renvoyé cette réponse ... et comparé autrement les valeurs INT2.


0 commentaires

4
votes

Je suppose que vous avez un objet qui a une chaîne avec 2 INTS?

Le moyen le plus simple de le faire est de faire en sorte que l'objet implémente comparable code> et d'implémenter le comparète (code> ) code> méthode. Ou vous pouvez transmettre un comparateur à Collections.sort (YourlistofObjects, YourCustomComparator) CODE> P>

La méthode comparèteo () comparera le premier INT en premier et s'ils sont égaux à comparer le second InTS. P>

@Override
public int compareTo(MyObject o) {
    // compare int1s .. if equal, compare int2s and return 0,1 or -1
}


0 commentaires

2
votes

Si seulement Java a pris en charge Lambdas ... Ceci est trivial dans tant de langues.

Mais, hmm, voyons. Voici deux approches générales (il existe de nombreuses variantes différentes de ces thèmes):

  1. Créez un nouveau type avec les membres en question
  2. Effectuez l'implémentation de type comparable (par exemple "" comparète ")
  3. Mettez des éléments de ce nouveau type dans une matrice ou une liste (peut-être Liste )
  4. Utilisez arrais.sort.sort ou collections.sort (ou similaire)

    ou,

    1. Créez un tableau ou une liste imbriquée (peut-être Liste > )
    2. Utilisez arrais.sort.sort ou Collections.sort (ou similaire) à l'aide du formulaire qui prend dans un comparateur

      codage heureux.


0 commentaires

2
votes

Bien d'abord définir ce que vous entendez par une "table".

Je voudrais envelopper chaque rangée dans un objet rangée code> et conserver une matrice de ces code> s. Ensuite, vous pouvez soit implémenter l'interface comparable code> ou écrire votre propre comparateur code>. P>

donc soit: p>

Arrays.sort(rows, new Comparator<Row>() {
    public int compare( Row r1, Row r2 ) {
        if( r1.int1 != r2.int1 ) return r1.int1-r2.int1;
        else return r1.int2-r2.int2;
    }
});


0 commentaires

1
votes

quelque chose comme ça? XXX


0 commentaires

4
votes

C'est plutôt pas clair ce que vous entendez par table. Mais dans le cas général, vous triez les données en Java à l'aide d'un comparateur ou de la mise en œuvre de votre structure de données comparable . Dans votre cas, vous créeriez une structure de données simple qui encapsule une ligne de votre table, puis créez un comparateur pour la structure de données de ligne ou avez-la d'utiliser comparable .

Par exemple xxx

alors vous créeriez une liste list et utilisez java.util.collections.sort (liste ) pour trier vos données.


0 commentaires

-1
votes

J'utiliserais un comparète à l'intérieur d'une implémentation comparateur.

Exemple d'utilisation, P>

    new Comparator<YourObjectType>() {
            @Override
            public int compare(YourObjectType o1, YourObjectType o2) {
                return new CompareToBuilder()
                   .append(o1.firstFieldToCompare, o2.firstFieldToCompare)
                   .append(o1.secondFieldToCompare, o2.secondFieldToCompare)
                   .toComparison();
            }
        }


0 commentaires