Java de tri basé sur deux colonnes
Permet de dire que j'ai de la table comme ceci:
String | Int1 | Int2
"foo" 5 0
"faa" 4 1
"zaa" 0 1
"zoo" 4 2
"laa" 4 3
"loo" 1 4
Ce que je voudrais obtenir de la table comme ceci:
String | Int1 | Int2
"foo" 5 0
"laa" 4 3
"zoo" 4 2
"faa" 4 1
"loo" 1 4
"zaa" 0 1
Première chose qui se passe est de tri basé sur la colonne Int1
.
Deuxième chose qui se passe, c'est une sorte de colonne en fonction de Int2
mais seulement sur des lignes qui ont le même nombres de la colonne Int1
Comment dois-je aborder ce problème sans utiliser de moteur de base de données?
Qu'entendez-vous par "table"?
Pourquoi ne pas simplement écrire votre propre compareTo()? Est-ce stockées dans une base de données?
Pourquoi ne pas simplement écrire votre propre compareTo()? Est-ce stockées dans une base de données?
OriginalL'auteur Mat B. | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
Normalement vous devriez le faire avec un
List<Item>
oùItem
est un type contenant toutes les trois valeurs ("foo", 5, 0 pour la première ligne, par exemple).Vous devez ensuite écrire un
Comparator<Item>
qui a comparé la Int1 valeurs des deuxItem
objets présentés danscompare
, et si cela a donné une réponse définitive, renvoyée de cette réponse... et sinon par rapport à la Int2 valeurs.OriginalL'auteur Jon Skeet
Je suis en supposant que vous avez un objet qui a une Chaîne avec 2 ints?
La façon la plus simple de le faire est de faire d'un objet de mettre en œuvre
Comparable
et de mettre en œuvre lacompareTo()
méthode. Ou vous pouvez passer un Comparateur deCollections.sort(yourListOfObjects, yourCustomComparator)
La compareTo() la méthode permettra de comparer le premier int d'abord, et si elles sont égales comparer le deuxième ints.
Voici un lien utile
http://download.oracle.com/javase/tutorial/collections/interfaces/order.html
OriginalL'auteur Kal
C'est plutôt floue de ce que vous entendez par table. Mais dans le cas général, vous trier les données en Java à l'aide d'un
Comparator
ou de faire votre structure de données mettre en œuvreComparable
. Dans votre cas, vous pouvez créer une simple structure de données qui encapsule une ligne dans la table, puis créer unComparator
pour la ligne de données de la structure ou de les mettre en œuvreComparable
.Par exemple
Ensuite, vous créez un
List<Row>
et l'utilisationjava.util.Collections.sort(List<?>)
trier vos données.OriginalL'auteur Joshua Kaplan
Eh bien d'abord définir ce que vous entendez par "table".
Je voudrais envelopper chaque ligne dans un objet
Row
et de garder un tableau de cesRow
s. Ensuite, vous pouvez soit mettre en œuvre laComparable<Row>
interface ou écrire votre propreComparator<Row>
.Donc, soit:
Et appel
Arrays.sort(rows);
Ou vous pouvez faire ceci:
où
rows
est unRow[]
.OriginalL'auteur tskuzzy
Si seulement Java pris en charge lambdas ... c'est trivial dans de nombreuses langues.
Mais, hmm, voyons. Voici deux approches générales (il existe de nombreuses variantes de ces thèmes):
Comparable
(par exemple, "compareTo")List<NewType>
)Arrays.sort
ouCollections.sort
(ou similaire)Ou,
List<List<Object>>
)Arrays.sort
ouCollections.sort
(ou similaire) à l'aide de la forme que prend dans unComparator
Heureux de codage.
OriginalL'auteur
Quelque chose comme cela?
OriginalL'auteur user802421
Je voudrais utiliser un CompareToBuilder à l'intérieur d'un Comparateur de mise en œuvre.
Exemple d'utilisation,
OriginalL'auteur James Anton