Below is an example to show how to use Lambda expression to sort a collection.
Prior to Java 8, it was necessary to implement the
java.util.Comparator
interface with an anonymous (or named) class when sorting a collection:
Java SE 1.2
Collections.sort(
personList,
new Comparator<Person>() {
public int compare(Person p1, Person p2){
return p1.getFirstName().compareTo(p2.getFirstName());
}
}
);
Starting with Java 8, the anonymous class can be replaced with a lambda expression. Note that the types for the parameters
p1
and p2
can be left out, as the compiler will infer them automatically:Collections.sort(
personList,
(p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName())
);
The example can be simplified by using
Comparator.comparing
and method references expressed using the ::
(double colon) symbol.Collections.sort(
personList,
Comparator.comparing(Person::getFirstName)
);
A static import allows us to express this more concisely, but it is debatable whether this improves overall readability:
import static java.util.Collections.sort;
import static java.util.Comparator.comparing;
//...
sort(personList, comparing(Person::getFirstName));
Comparators built this way can also be chained together. For example, after comparing people by their first name, if there are people with the same first name, the
thenComparing
method with also compare by last name:sort(personList, comparing(Person::getFirstName).thenComparing(Person::getLastName));
No comments:
Post a Comment