Je sais que la question a été posée il y a longtemps mais en fait j'ai eu le même problème. Si vous ne savez pas combien de variables vous auriez sur la liste, mais ce n'est pas un grand nombre, vous pouvez simplement mettre en œuvre un comparateur pour chaque choix. par exemple
Je ArrayList<ArrayList<Object>>
et à trier par de colonne et je sais que la liste imbriquée se composent de nombre variable d'objets que je peux simplement mettre en œuvre comparateur pour toutes les valeurs possibles:
public class SecondColumnComparator implements Comparator {
public static boolean isNumeric(String str) {
try {
Integer integer = Integer.parseInt(str);
} catch (NumberFormatException nfe) {
return false;
}
return true;
}
@Override
public int compare(Object o1, Object o2) {
if (isNumeric(((ArrayList<String>) o1).get(1))) {
Integer firstInteger = Integer.parseInt(((ArrayList<String>) o1).get(1));
Integer secondInteger = Integer.parseInt(((ArrayList<String>) o2).get(1));
return firstInteger.compareTo(secondInteger);
}
if (((ArrayList<Object>) o1).get(1) instanceof String) {
String firstString = ((ArrayList<String>) o1).get(1);
String secondString = ((ArrayList<String>) o2).get(1);
return firstString.compareTo(secondString);
}
throw new Exception();
}
}
et appeler cela ainsi:
switch (valueSelected) {
case 0:
Collections.sort(this.listOfLists, new FirstColumnComparator());
break;
case 1:
Collections.sort(this.listOfLists, new SecondColumnComparator());
break;
case 2:
Collections.sort(this.listOfLists, new ThirdColumnComparator());
break;
case 3:
Collections.sort(this.listOfLists, new FourthColumnComparator());
break;
default:
}
Dans chaque comparateur modifiant juste .get(x)
où x est le nombre de collumn par que vous voulez trier.
La fonction boolean isNumeric(String str);
peut être utilisée parce que vous ne pouvez pas stocker différents types d'objets dans une liste, donc je mets la reconnaissance de ceci dans le comparateur et j'analyse String en un autre type. Rappelez-vous que ce comparator
et ses "calculs" sont appelés à chaque comparaison faite par un algorithme donc il est extrêmement inefficace ... En dépit de ce fait, c'est une sorte de solution.
bien je vais regarder dans ce – Raptrex
devrais-je faire plusieurs objets ou quelque chose, parce que la raison pour laquelle j'ai pensé à utiliser un ArrayList était parce que je ne sais pas combien d'éléments il y aurait – Raptrex
Vous devrez créer plusieurs objets instances, oui, et ajoutez-les à ArrayList. 'items.add (nouvel item (" Pain ", 1)); items.add (nouvel item ("Lait", 2)); ', etc ... – ChssPly76