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-compatibleComparatorthat will sortIterables in a manner that is consistent with the byte-representation ofTuples. In particular, if one has twoTuples,tuple1andtuple2, 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
Iterablemust 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
Tuples andLists 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 intcompare(java.lang.Iterable<?> iterable1, java.lang.Iterable<?> iterable2)Compare twoIterables in a way consistent with their byte representation.
-
-
-
Method Detail
-
compare
public int compare(java.lang.Iterable<?> iterable1, java.lang.Iterable<?> iterable2)Compare twoIterables in a way consistent with their byte representation. This is done element-wise and is consistent with a number of other ways of sortingTuples. This will raise anIllegalArgumentExceptionif any of the items of eitherIterablecannot be serialized by aTuple.- Specified by:
comparein interfacejava.util.Comparator<java.lang.Iterable<?>>- Parameters:
iterable1- the firstIterableof itemsiterable2- the secondIterableof 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
-
-