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 theComparable
interface.Use SafeComparator.INSTANCE to obtain an instance of non-delegating SafeComparator.
- Author:
- gg 2002.12.10
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.tangosol.util.Base
Base.LoggingWriter
-
-
Field Summary
Fields Modifier and Type Field Description static SafeComparator
INSTANCE
The trivial SafeComparator.protected Comparator<? super T>
m_comparator
The wrapped Comparator.protected boolean
m_fNullFirst
Flag specifying if nulls should be sorted as less (first) or greater (last) than all non-null elements.
-
Constructor Summary
Constructors Constructor Description SafeComparator()
Default 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
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
compare(T o1, T o2)
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.boolean
equals(Object o)
Determine if two comparators are equal.Comparator<? super T>
getComparator()
Obtain the wrapped Comparator.int
hashCode()
Return the hash code for this comparator.static <T> SafeComparator<T>
INSTANCE()
Return the trivial SafeComparator.boolean
isKeyComparator()
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
isNullFirst()
Obtain the m_fNullFirst flag.void
readExternal(PofReader in)
Restore the contents of a user type instance by reading its state using the specified PofReader object.void
readExternal(DataInput in)
Restore the contents of this object by loading the object's state from the passed DataInput object.String
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 Detail
-
INSTANCE
public static final SafeComparator INSTANCE
The trivial SafeComparator.
-
m_comparator
protected Comparator<? super T> m_comparator
The wrapped Comparator. Could be null.
-
m_fNullFirst
protected boolean m_fNullFirst
Flag specifying if nulls should be sorted as less (first) or greater (last) than all non-null elements. Default is "less than" (first).
-
-
Constructor Detail
-
SafeComparator
public SafeComparator()
Default constructor (for ExternalizableLite and PortableObject).
-
SafeComparator
public SafeComparator(Comparator<? super T> comparator)
Construct a SafeComparator delegating to the specified (wrapped) comparator.- Parameters:
comparator
- Comparator object to delegate comparison of non-null values (optional)
-
SafeComparator
public SafeComparator(Comparator<? super T> comparator, boolean fNullFirst)
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 Detail
-
compare
public int compare(T o1, T o2)
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
public int compareEntries(QueryMap.Entry entry1, QueryMap.Entry entry2)
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
public static boolean isKeyComparator(Comparator comparator)
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
public Comparator<? super T> getComparator()
Obtain the wrapped Comparator.- Returns:
- the wrapped Comparator
-
isNullFirst
public boolean isNullFirst()
Obtain the m_fNullFirst flag.- Returns:
- the m_fNullFirst flag
-
compareSafe
public static <T> int compareSafe(Comparator comparator, Object o1, Object o2)
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
public static int compareSafe(Comparator comparator, Object o1, Object o2, boolean fNullFirst)
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
public String toString()
Return a human-readable description for this Comparator.
-
equals
public boolean equals(Object o)
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
public void readExternal(DataInput in) throws IOException
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 occursNotActiveException
- if the object is not in its initial state, and therefore cannot be deserialized into
-
writeExternal
public void writeExternal(DataOutput out) throws IOException
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
public void readExternal(PofReader in) throws IOException
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
public void writeExternal(PofWriter out) throws IOException
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
public static <T> SafeComparator<T> INSTANCE()
Return the trivial SafeComparator.
-
-