Student: ex17
Sorting
Part of a series of tutorial articles about a Student class.
Code examples referred to on this page can be found here: https://github.com/ucsb-cs156/student-tutorial/tree/ex17.
NOTE: NOT YET UPDATED FOR JAVA 17 and JUNIT 5 (TODO for W22, 01/05/22)
In this exercise, we build on ex15, where we showed writing a java.util.Compartor<Student>
that allows us to sort by name.
The Comparator in ex15 was implemented as a separate named class. However, since Java 8, it is much easier to write Comparators as lambda expressions.
However, that’s only true if you understand what a lambda expression in Java represents.
A lambda expression is:
- a simplified notation
- for an instance of an anonymous inner class
- that implements a functional interface
That’s a lot to unpack, so we’ll tackle it a little a time.
First, we tackle inner class. We’ll first implement a Comparator that is a named (non-anonymous) inner class of Student
.
Next, we tackle anonymous inner class. The second new Compartor in this exercise will be an anonymous inner class of ReadStudents
.
At that point we are ready to see a lambda expression. This is a simplified notation for an instance of an anonymous inner class, and it will be implemented inside ReadStudent
.
Finally, we can see that with these concepts in place, we can compose new Comparators from ones that already exist using thenComparing
and reversed
.