I’m working on implementing a hierarchy which deals with Comparator and the Comparable interface. Couple of things that are unclear to me:
-
If I’m adding comparators to a comparator chain, what exactly does this piece of code mean
chain.addComparator(new sortByTitle());I know that the
sortByTitle()argument has to be a comparator but I don’t understand how you implement a function like this? The comparator requires you to implement thecompare(obj1, obj2)function which takes two arguments to compare one against the other, how do you get from that to a single (what looks like a constructor) call with no arguments? -
Say that I implemented a class called
Databasewhich stores some items in anArrayListcalleditem. The variableitemis itself a private variable. Now in the main program, a call like this is made:Collections.sort(library.item, chain);How is it possible to directly access an object library‘s instance of
item? The specification for database states thatitemneeds to be private, can this work?
I would appreciate any help.
Comparatoritself is an interface. When yousay
chain.addComparator(new sortByTitle());, you are passing in aninstance of an implementation of a Comparator that sorts your object
by title. The
sortByTitleclass will in this case implementComparatorand will provide an implementation of thecompare(obj1, obj2)method. which your chain can invoke on thatinstance you pass in. Typically, instead of passing a new instance in every time, all
Comparatorimplementations for anObject are declared as public static final members of the Object
itself.
For example:
You could then simply pass them into you chain in this way:
This has the added benifit of allowing the comparator (which is stateless) to be used elsewhere without creating a new instance every time.
Something like:
and
in the Library class.