Class ComparatorChain<E>
- Type Parameters:
E
- the type of objects compared by this comparator
- All Implemented Interfaces:
Serializable
,Comparator<E>
To further facilitate SQL-like sorting, the order of any single Comparator in the list can be reversed.
Calling a method that adds new Comparators or changes the ascend/descend sort after compare(Object, Object) has been called will result in an UnsupportedOperationException. However, take care to not alter the underlying List of Comparators or the BitSet that defines the sort order.
Instances of ComparatorChain are not synchronized. The class is not thread-safe at construction time, but it is thread-safe to perform multiple comparisons after all the setup operations are complete.
- Since:
- 2.0
- See Also:
-
Constructor Summary
ConstructorDescriptionConstruct a ComparatorChain with no Comparators.ComparatorChain
(Comparator<E> comparator) Construct a ComparatorChain with a single Comparator, sorting in the forward orderComparatorChain
(Comparator<E> comparator, boolean reverse) Construct a Comparator chain with a single Comparator, sorting in the given orderComparatorChain
(List<Comparator<E>> list) Construct a ComparatorChain from the Comparators in the List.ComparatorChain
(List<Comparator<E>> list, BitSet bits) Construct a ComparatorChain from the Comparators in the given List. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addComparator
(Comparator<E> comparator) Add a Comparator to the end of the chain using the forward sort ordervoid
addComparator
(Comparator<E> comparator, boolean reverse) Add a Comparator to the end of the chain using the given sort orderint
Perform comparisons on the Objects as per Comparator.compare(o1,o2).boolean
Returnstrue
iff that Object is is aComparator
whose ordering is known to be equivalent to mine.int
hashCode()
Implement a hash code for this comparator that is consistent withequals
.boolean
isLocked()
Determine if modifications can still be made to the ComparatorChain.void
setComparator
(int index, Comparator<E> comparator) Replace the Comparator at the given index, maintaining the existing sort order.void
setComparator
(int index, Comparator<E> comparator, boolean reverse) Replace the Comparator at the given index in the ComparatorChain, using the given sort ordervoid
setForwardSort
(int index) Change the sort order at the given index in the ComparatorChain to a forward sort.void
setReverseSort
(int index) Change the sort order at the given index in the ComparatorChain to a reverse sort.int
size()
Number of Comparators in the current ComparatorChain.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Constructor Details
-
ComparatorChain
public ComparatorChain()Construct a ComparatorChain with no Comparators. You must add at least one Comparator before calling the compare(Object,Object) method, or an UnsupportedOperationException is thrown -
ComparatorChain
Construct a ComparatorChain with a single Comparator, sorting in the forward order- Parameters:
comparator
- First comparator in the Comparator chain
-
ComparatorChain
Construct a Comparator chain with a single Comparator, sorting in the given order- Parameters:
comparator
- First Comparator in the ComparatorChainreverse
- false = forward sort; true = reverse sort
-
ComparatorChain
Construct a ComparatorChain from the Comparators in the List. All Comparators will default to the forward sort order.- Parameters:
list
- List of Comparators- See Also:
-
ComparatorChain
Construct a ComparatorChain from the Comparators in the given List. The sort order of each column will be drawn from the given BitSet. When determining the sort order for Comparator at index i in the List, the ComparatorChain will call BitSet.get(i). If that method returns false, the forward sort order is used; a return value of true indicates reverse sort order.- Parameters:
list
- List of Comparators. NOTE: This constructor does not perform a defensive copy of the listbits
- Sort order for each Comparator. Extra bits are ignored, unless extra Comparators are added by another method.
-
-
Method Details
-
addComparator
Add a Comparator to the end of the chain using the forward sort order- Parameters:
comparator
- Comparator with the forward sort order
-
addComparator
Add a Comparator to the end of the chain using the given sort order- Parameters:
comparator
- Comparator to add to the end of the chainreverse
- false = forward sort order; true = reverse sort order
-
setComparator
Replace the Comparator at the given index, maintaining the existing sort order.- Parameters:
index
- index of the Comparator to replacecomparator
- Comparator to place at the given index- Throws:
IndexOutOfBoundsException
- if index < 0 or index >= size()
-
setComparator
Replace the Comparator at the given index in the ComparatorChain, using the given sort order- Parameters:
index
- index of the Comparator to replacecomparator
- Comparator to setreverse
- false = forward sort order; true = reverse sort order
-
setForwardSort
public void setForwardSort(int index) Change the sort order at the given index in the ComparatorChain to a forward sort.- Parameters:
index
- Index of the ComparatorChain
-
setReverseSort
public void setReverseSort(int index) Change the sort order at the given index in the ComparatorChain to a reverse sort.- Parameters:
index
- Index of the ComparatorChain
-
size
public int size()Number of Comparators in the current ComparatorChain.- Returns:
- Comparator count
-
isLocked
public boolean isLocked()Determine if modifications can still be made to the ComparatorChain. ComparatorChains cannot be modified once they have performed a comparison.- Returns:
- true = ComparatorChain cannot be modified; false = ComparatorChain can still be modified.
-
compare
Perform comparisons on the Objects as per Comparator.compare(o1,o2).- Specified by:
compare
in interfaceComparator<E>
- Parameters:
o1
- the first object to compareo2
- the second object to compare- Returns:
- -1, 0, or 1
- Throws:
UnsupportedOperationException
- if the ComparatorChain does not contain at least one Comparator
-
hashCode
public int hashCode()Implement a hash code for this comparator that is consistent withequals
. -
equals
Returnstrue
iff that Object is is aComparator
whose ordering is known to be equivalent to mine.This implementation returns
true
iffobject.
equalsgetClass()
this.getClass()
, and the underlying comparators and order bits are equal. Subclasses may want to override this behavior to remain consistent with theComparator.equals(Object)
contract.- Specified by:
equals
in interfaceComparator<E>
- Overrides:
equals
in classObject
- Parameters:
object
- the object to compare with- Returns:
- true if equal
- Since:
- 3.0
-