Class PairLexicoder<A extends Comparable<A>,​B extends Comparable<B>>

  • All Implemented Interfaces:
    Encoder<org.apache.accumulo.core.util.ComparablePair<A,​B>>, Lexicoder<org.apache.accumulo.core.util.ComparablePair<A,​B>>

    public class PairLexicoder<A extends Comparable<A>,​B extends Comparable<B>>
    extends org.apache.accumulo.core.clientImpl.lexicoder.AbstractLexicoder<org.apache.accumulo.core.util.ComparablePair<A,​B>>
    This class is a lexicoder that sorts a ComparablePair. Each item in the pair is encoded with the given lexicoder and concatenated together. This makes it easy to construct a sortable key based on two components. There are many examples of this- but a key/value relationship is a great one. If we decided we wanted a two-component key where the first component is a string and the second component a date which is reverse sorted, we can do so with the following example:
     
     StringLexicoder strEncoder = new StringLexicoder();
     ReverseLexicoder<Date> dateEnc = new ReverseLexicoder<>(new DateLexicoder());
     PairLexicoder<String,Date> pair = new PairLexicoder<>(strEncoder, dateEnc);
     long now = System.currentTimeMillis();
     byte[] pair1 = pair.encode(new ComparablePair<>("com", new Date(now)));
     byte[] pair2 = pair.encode(new ComparablePair<>("com", new Date(now + 500)));
     byte[] pair3 = pair.encode(new ComparablePair<>("org", new Date(now + 1000)));
     
     
    In the example, pair2 will be sorted before pair1. pair3 will occur last since 'org' is sorted after 'com'. If we just used a DateLexicoder instead of a ReverseLexicoder, pair1 would have been sorted before pair2.
    Since:
    1.6.0
    • Constructor Detail

      • PairLexicoder

        public PairLexicoder​(Lexicoder<A> firstLexicoder,
                             Lexicoder<B> secondLexicoder)
    • Method Detail

      • encode

        public byte[] encode​(org.apache.accumulo.core.util.ComparablePair<A,​B> data)
      • decodeUnchecked

        protected org.apache.accumulo.core.util.ComparablePair<A,​B> decodeUnchecked​(byte[] data,
                                                                                          int offset,
                                                                                          int len)
        Description copied from class: AbstractEncoder
        Decodes a byte array without checking if the offset and len exceed the bounds of the actual array.
        Specified by:
        decodeUnchecked in class AbstractEncoder<org.apache.accumulo.core.util.ComparablePair<A extends Comparable<A>,​B extends Comparable<B>>>