You can use custom Comparator.
Here's a complete example (import exception):
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
Student s1 = new Student();
s1.setScore(90);
s1.setFirstName("abc");
students.add(s1);
Student s2 = new Student();
s2.setScore(95);
s2.setFirstName("def");
students.add(s2);
Student s3 = new Student();
s3.setScore(85);
s3.setFirstName("xyz");
students.add(s1);
System.out.printf("Unordered: %s%n", students);
Collections.sort(students, new Comparator<Student>() {
public int compare(Student s1, Student s2) {
return ((Integer)s1.getScore()).compareTo(s2.getScore());
}
});
System.out.printf("Ordered: %s%n", students);
}
static class Student {
private int score;
private String firstName;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String name) {
this.firstName = name;
}
@Override
public String toString() {
return String.format("Student \"%s\" with score: %d%n", firstName,
score);
}
}
}
Output
Unordered: [Student "abc" with score: 90
, Student "def" with score: 95
, Student "abc" with score: 90
]
Ordered: [Student "abc" with score: 90
, Student "abc" with score: 90
, Student "def" with score: 95
]
Note
As already mentioned, you can also implement Comparable<Student>in your class Student, if only the default (or default) sort will be by result. #
Second edit
To sort in descending order, you can replace the operator returnin the Comparatorfollowing way:
return ((Integer)s2.getScore()).compareTo(s1.getScore());
programminglover , / !