This post shows how you can use Java 8 lambda expressions and method references to sort a list of Person
objects by age. In Java 8, the List
interface has a sort
method, which expects a Comparator
to compare two objects.
Traditionally, you would either sort a list by creating a specific class that implements the Comparator
interface, like this:
public class AgeComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { return Integer.compare(p1.getAge(), p2.getAge()); } } list.sort(new AgeComparator());
or, you would use an anonymous class, like this:
list.sort(new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return Integer.compare(p1.getAge(), p2.getAge()); } });
As you can see, this is quite verbose!
Java 8 introduces lambda expressions, which allow you to pass code more concisely. Since Comparator
is a functional interface, you can use a lambda expression to sort the list:
list.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));
You may have noticed that the Comparator
class has a static method called comparingInt
that takes a ToIntFunction
and returns a Comparator
object. So, we can rewrite the code above to:
import static java.util.Comparator.comparingInt; list.sort(comparingInt(p -> p.getAge()));
Finally, we can improve our code even further by using a method reference, which is just "syntactic sugar" for a lambda expression:
list.sort(comparingInt(Person::getAge));
The final solution is not only shorter but is also easier to read :)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.