Package com.apple.foundationdb.tuple
Class IterableComparator
- java.lang.Object
-
- com.apple.foundationdb.tuple.IterableComparator
-
- All Implemented Interfaces:
java.util.Comparator<java.lang.Iterable<?>>
public class IterableComparator extends java.lang.Object implements java.util.Comparator<java.lang.Iterable<?>>
ATuple
-compatibleComparator
that will sortIterable
s in a manner that is consistent with the byte-representation ofTuple
s. In particular, if one has twoTuple
s,tuple1
andtuple2
, it is the case that:tuple1.compareTo(tuple2) == new IterableComparator().compare(tuple1, tuple2) == new IterableComparator().compare(tuple1.getItems(), tuple2.getItems()), == ByteArrayUtil.compareUnsigned(tuple1.pack(), tuple2.pack())
The individual elements of the
Iterable
must be of a type that can be serialized by aTuple
. For items of identical types, they will be sorted in a way that is consistent with their natural ordering with a few caveats:- For floating point types, negative NaN values are sorted before all regular values, and positive NaN values are sorted after all regular values.
- Single-precision floating point numbers are sorted before all double-precision floating point numbers.
-
UUIDs are sorted by their unsigned Big-Endian byte representation
rather than their signed byte representation (which is the behavior of
UUID.compareTo()
). - Strings are sorted explicitly by their UTF-8 byte representation
- Nested
Tuple
s andList
s are sorted element-wise.
-
-
Constructor Summary
Constructors Constructor Description IterableComparator()
Creates a newIterableComparator
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
compare(java.lang.Iterable<?> iterable1, java.lang.Iterable<?> iterable2)
Compare twoIterable
s in a way consistent with their byte representation.
-
-
-
Method Detail
-
compare
public int compare(java.lang.Iterable<?> iterable1, java.lang.Iterable<?> iterable2)
Compare twoIterable
s in a way consistent with their byte representation. This is done element-wise and is consistent with a number of other ways of sortingTuple
s. This will raise anIllegalArgumentException
if any of the items of eitherIterable
cannot be serialized by aTuple
.- Specified by:
compare
in interfacejava.util.Comparator<java.lang.Iterable<?>>
- Parameters:
iterable1
- the firstIterable
of itemsiterable2
- the secondIterable
of items- Returns:
- a negative number if the first iterable would sort before the second when serialized, a positive number if the opposite is true, and zero if the two are equal
-
-