Package com.tangosol.util.comparator
Class SafeComparator<T>
java.lang.Object
com.tangosol.util.Base
com.tangosol.util.comparator.SafeComparator<T>
- All Implemented Interfaces:
ExternalizableLite
,PortableObject
,EntryAwareComparator<T>
,QueryMapComparator<T>
,Remote.Comparator<T>
,Serializable
,Comparator<T>
- Direct Known Subclasses:
EntryComparator
,InverseComparator
public class SafeComparator<T>
extends Base
implements Remote.Comparator<T>, QueryMapComparator<T>, EntryAwareComparator<T>, Serializable, ExternalizableLite, PortableObject
Null-safe delegating comparator. Null values are evaluated as "less then"
any non-null value. If the wrapped comparator is not specified then all
non-null values must implement the
Comparable
interface.
Use SafeComparator.INSTANCE to obtain an instance of non-delegating SafeComparator.
- Author:
- gg 2002.12.10
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
Field Summary
Modifier and TypeFieldDescriptionstatic final SafeComparator
The trivial SafeComparator.protected Comparator
<? super T> The wrapped Comparator.protected boolean
Flag specifying if nulls should be sorted as less (first) or greater (last) than all non-null elements. -
Constructor Summary
ConstructorDescriptionDefault constructor (for ExternalizableLite and PortableObject).SafeComparator
(Comparator<? super T> comparator) Construct a SafeComparator delegating to the specified (wrapped) comparator.SafeComparator
(Comparator<? super T> comparator, boolean fNullFirst) Construct a SafeComparator delegating to the specified (wrapped) comparator. -
Method Summary
Modifier and TypeMethodDescriptionint
Compares its two arguments for order.int
compareEntries
(QueryMap.Entry entry1, QueryMap.Entry entry2) Compare two entries using the underlying comparator.static <T> int
compareSafe
(Comparator comparator, Object o1, Object o2) Compares its two arguments for order.static int
compareSafe
(Comparator comparator, Object o1, Object o2, boolean fNullFirst) Compares its two arguments for order.static <V> Comparator
<? super V> ensureSafe
(Comparator<? super V> comparator) Ensure that the specified comparator is safe, by wrapping it if it isn't.boolean
Determine if two comparators are equal.Comparator
<? super T> Obtain the wrapped Comparator.int
hashCode()
Return the hash code for this comparator.static <T> SafeComparator
<T> INSTANCE()
Return the trivial SafeComparator.boolean
Specifies whether this comparator expects to compare keys or values.static boolean
isKeyComparator
(Comparator comparator) Check whether the specified comparator expects to compare keys or values.boolean
Obtain the m_fNullFirst flag.void
Restore the contents of a user type instance by reading its state using the specified PofReader object.void
Restore the contents of this object by loading the object's state from the passed DataInput object.toString()
Return a human-readable description for this Comparator.void
writeExternal
(PofWriter out) Save the contents of a POF user type instance by writing its state using the specified PofWriter object.void
writeExternal
(DataOutput out) Save the contents of this object by storing the object's state into the passed DataOutput object.Methods inherited from class com.tangosol.util.Base
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mergeArray, mergeBooleanArray, mergeByteArray, mergeCharArray, mergeDoubleArray, mergeFloatArray, mergeIntArray, mergeLongArray, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.Comparator
thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
Methods inherited from interface com.tangosol.util.function.Remote.Comparator
reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
INSTANCE
The trivial SafeComparator. -
m_comparator
The wrapped Comparator. Could be null. -
m_fNullFirst
protected boolean m_fNullFirstFlag specifying if nulls should be sorted as less (first) or greater (last) than all non-null elements. Default is "less than" (first).
-
-
Constructor Details
-
SafeComparator
public SafeComparator()Default constructor (for ExternalizableLite and PortableObject). -
SafeComparator
Construct a SafeComparator delegating to the specified (wrapped) comparator.- Parameters:
comparator
- Comparator object to delegate comparison of non-null values (optional)
-
SafeComparator
Construct a SafeComparator delegating to the specified (wrapped) comparator.- Parameters:
comparator
- Comparator object to delegate comparison of non-null values (optional)fNullFirst
- flag specifying if null values should be treated as "less than" (true) or "greater than" (false) any non-null value
-
-
Method Details
-
ensureSafe
Ensure that the specified comparator is safe, by wrapping it if it isn't.- Type Parameters:
V
- the type of objects to compare- Parameters:
comparator
- the comparator to wrap, if necessary- Returns:
- a
SafeComparator
for the specified comparator
-
compare
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. Null values are evaluated as "less then" any non-null value. If the wrapped comparator is not specified, all non-null values must implement theComparable
interface.- Specified by:
compare
in interfaceComparator<T>
- Parameters:
o1
- the first object to be comparedo2
- the second object to be compared- Returns:
- a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
- Throws:
ClassCastException
- if the arguments' types prevent them from being compared by this Comparator.
-
compareEntries
Compare two entries using the underlying comparator. If the wrapped comparator does not implement the QueryMapComparator interface, revert to the entry values comparison.- Specified by:
compareEntries
in interfaceQueryMapComparator<T>
- Parameters:
entry1
- the first entry to compare values from; read-onlyentry2
- the second entry to compare values from; read-only- Returns:
- a negative integer, zero, or a positive integer as the first entry denotes a value that is is less than, equal to, or greater than the value denoted by the second entry
-
isKeyComparator
public boolean isKeyComparator()Specifies whether this comparator expects to compare keys or values.- Specified by:
isKeyComparator
in interfaceEntryAwareComparator<T>
- Returns:
- true if Entry keys are expected; false otherwise
-
isKeyComparator
Check whether the specified comparator expects to compare keys or values.- Parameters:
comparator
- a Comparator to check- Returns:
- true if the comparator expects keys; false otherwise
-
getComparator
Obtain the wrapped Comparator.- Returns:
- the wrapped Comparator
-
isNullFirst
public boolean isNullFirst()Obtain the m_fNullFirst flag.- Returns:
- the m_fNullFirst flag
-
compareSafe
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. Null values are evaluated as "less then" any non-null value. Non-null values must implement theComparable
interface.- Parameters:
comparator
- a comparator to use for the comparison (optional)o1
- the first object to be comparedo2
- the second object to be compared- Returns:
- a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
- Throws:
ClassCastException
- if the arguments are not Comparable
-
compareSafe
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. Null values are evaluated based on the value of afNullFirst
flag as either "less than" or "greater than" any non-null value. Non-null values must implement theComparable
interface.- Parameters:
comparator
- a comparator to use for the comparison (optional)o1
- the first object to be comparedo2
- the second object to be comparedfNullFirst
- flag specifying if null values should be treated as "less than" (true) or "greater than" (false) any non-null value- Returns:
- a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
- Throws:
ClassCastException
- if the arguments are not Comparable
-
toString
Return a human-readable description for this Comparator. -
equals
Determine if two comparators are equal.- Specified by:
equals
in interfaceComparator<T>
- Overrides:
equals
in classObject
- Parameters:
o
- the other comparator- Returns:
- true if the passed object is equal to this
-
hashCode
public int hashCode()Return the hash code for this comparator. -
readExternal
Restore the contents of this object by loading the object's state from the passed DataInput object.- Specified by:
readExternal
in interfaceExternalizableLite
- Parameters:
in
- the DataInput stream to read data from in order to restore the state of this object- Throws:
IOException
- if an I/O exception occurs
-
writeExternal
Save the contents of this object by storing the object's state into the passed DataOutput object.- Specified by:
writeExternal
in interfaceExternalizableLite
- Parameters:
out
- the DataOutput stream to write the state of this object to- Throws:
IOException
- if an I/O exception occurs
-
readExternal
Restore the contents of a user type instance by reading its state using the specified PofReader object.- Specified by:
readExternal
in interfacePortableObject
- Parameters:
in
- the PofReader from which to read the object's state- Throws:
IOException
- if an I/O error occurs
-
writeExternal
Save the contents of a POF user type instance by writing its state using the specified PofWriter object.- Specified by:
writeExternal
in interfacePortableObject
- Parameters:
out
- the PofWriter to which to write the object's state- Throws:
IOException
- if an I/O error occurs
-
INSTANCE
Return the trivial SafeComparator.
-