I have a List:
LinkedList<Student> student = new LinkedList<Student>();
In the Student class, it has an attribute String name. I want to sort the List students by its name. Is there any way I could do that?
I have a List:
LinkedList<Student> student = new LinkedList<Student>();
In the Student class, it has an attribute String name. I want to sort the List students by its name. Is there any way I could do that?
student.sort(Comparator.comparing(Student::getName));
Read more about comparators.
You can define a Comparator to do this. One easy way is with an anonymous class. https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
Collections.sort(student, new Comparator<Student>() {
public int compare(Student a, Student b) {
return a.getName().compare(b.getName());
}
};
You can use the Collections.sort
method accepts a comparator
as its second argument. Pass in a comparator
that defines the ordering that you would like. For example given a Student
class, you can use Collections.sort
with a custom comparator
to sort Student
by ascending order of name like this:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
class Student {
private final String name;
private final int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
@Override
public String toString() {
return "Student [name=" + name + ", score=" + score + "]";
}
public static void main(String[] args) {
List<Student> list = new LinkedList<>(
Arrays.asList(new Student("David", 3), new Student("Alice", 3), new Student("Thomas", 9)));
System.out.println("Before Sort: " + list);
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getName().compareTo(o2.getName());
}
});
System.out.println("After Sort: " + list);
}
}
This will produce the output
before: [Student [name=David, score=3], Student [name=Alice, score=3], Student [name=Thomas, score=9]]
after: [Student [name=Alice, score=3], Student [name=David, score=3], Student [name=Thomas, score=9]]
if you use java > 8. You can use Lambda expression, and you get something like this:
Collections.sort(student, (p1, p2) -> p1.name.compareTo(p2.name));
or Using sort method in List
student.sort((p1, p2) -> p1.name.compareTo(p2.name));
simply you can use this
student.sort(Comparator.comparing(Student:: getName));//Single Sorting
student.sort(Comparator.comparing(Student:: getName).reversed());//Single reverse Sorting
student.sort(Comparator.comparing(Student:: getName).thenComparing(Student::getScore));//Double