J'ai appris à utiliser le comparable mais j'ai des difficultés avec le comparateur. J'ai une erreur dans mon code :
Exception in thread "main" java.lang.ClassCastException: New.People cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at New.TestPeople.main(TestPeople.java:18)
Voici mon code :
import java.util.Comparator;
public class People implements Comparator {
private int id;
private String info;
private double price;
public People(int newid, String newinfo, double newprice) {
setid(newid);
setinfo(newinfo);
setprice(newprice);
}
public int getid() {
return id;
}
public void setid(int id) {
this.id = id;
}
public String getinfo() {
return info;
}
public void setinfo(String info) {
this.info = info;
}
public double getprice() {
return price;
}
public void setprice(double price) {
this.price = price;
}
public int compare(Object obj1, Object obj2) {
Integer p1 = ((People) obj1).getid();
Integer p2 = ((People) obj2).getid();
if (p1 > p2) {
return 1;
} else if (p1 < p2){
return -1;
} else {
return 0;
}
}
}
import java.util.ArrayList;
import java.util.Collections;
public class TestPeople {
public static void main(String[] args) {
ArrayList peps = new ArrayList();
peps.add(new People(123, "M", 14.25));
peps.add(new People(234, "M", 6.21));
peps.add(new People(362, "F", 9.23));
peps.add(new People(111, "M", 65.99));
peps.add(new People(535, "F", 9.23));
Collections.sort(peps);
for (int i = 0; i < peps.size(); i++){
System.out.println(peps.get(i));
}
}
}
Je pense que cela a quelque chose à voir avec le moulage dans la méthode de comparaison, mais j'ai joué avec et je n'ai toujours pas trouvé la solution.
0 votes
Voir stackoverflow.com/questions/2477261/how-to-sort-a-collectiont/
1 votes
N'utilisez pas de types bruts dans le nouveau code stackoverflow.com/questions/2770321/ ; utiliser
Comparator<People>
,Comparable<People>
,List<People>
etc.0 votes
J'ai changé le Comparator<People> mais quand je change Arraylist<People>, le Collections.sort obtient une erreur
1 votes
Lisez ma réponse concernant les 2 surcharges de
sort
. Si on vous dit d'utiliserComparator<People>
puis utiliser la méthode à 2 argumentssort
et non l'argument 1sort
(ce qui nécessitePeople implements Comparable<People>
).