Right now all streams use the Comparator<Tuple> interface to compare tuples. The Comparator interface will tell you if tupleA is before, after, or equal to tupleB. This is great for most streams as they use this logic when combining multiple streams together. However, some streams only care about the equality of two tuples and the less/greater than logic is unnecessary.
This depends on
This patch is to introduce a new interface into streaming expressions called Equalitor<Tuple> which will return if two tuples are equal. The benefit here is that the expressions for streams using Equalitor instead of Comparator can omit the ordering part.
unique(somestream, over="fieldA asc, fieldB desc")
The added benefit is that this will set us up with simplier expressions for joins (hash, merge, inner, outer, etc...) as those only care about equality.
By adding this as an interface we make no assumptions about what it means to be equal, just that some implementation needs to exist adhering to the Equalitor<Tuple> interface which will determine if two tuples are logically equal.
We do define at least one concrete class which checks for equality but that does not preclude others from adding additional concrete classes with their own logic in place.