Class HumanComparator

  • All Implemented Interfaces:
    java.util.Comparator<java.lang.String>

    public class HumanComparator
    extends java.lang.Object
    implements java.util.Comparator<java.lang.String>
    A comparator that sorts Strings using "human" ordering, including decimal ordering. Only works for languages where every character is lexigraphically distinct and correctly unicode ordered (e.g. English). Other languages should use CollatedHumanComparator. Pretty efficient but still slower than String.compareTo().
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.util.Comparator<java.lang.String> DEFAULT_HUMAN_COMPARATOR  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int compare​(java.lang.String str1, java.lang.String str2)  
      static java.util.Comparator<java.lang.String> getInstance()
      Returns a singleton comparator that implements the default behaviour.
      HumanComparator.CharType[] getSortOrder()  
      void setSortOrder​(HumanComparator.CharType[] sortOrder)
      Set the order in which letters, numbers and everything else is presented.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.Comparator

        equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
    • Constructor Detail

      • HumanComparator

        public HumanComparator()
        Default constructor which does nothing. Here because it has a non-default constructor.
    • Method Detail

      • getInstance

        public static java.util.Comparator<java.lang.String> getInstance()
        Returns a singleton comparator that implements the default behaviour.
        Returns:
        the singleton comparator.
      • compare

        public int compare​(java.lang.String str1,
                           java.lang.String str2)
        Specified by:
        compare in interface java.util.Comparator<java.lang.String>
      • setSortOrder

        public void setSortOrder​(HumanComparator.CharType[] sortOrder)
        Set the order in which letters, numbers and everything else is presented. Default is other, digits and then letters. For example, the strings "abb", "a1b" and "a b" will sort in the order "a b", "a1b" then "abb" by default.
        Parameters:
        sortOrder - Must be an array of CharType containing exactly 3 elements each of which must be distinct.
        Throws:
        java.lang.IllegalArgumentException - if being called on the result of HumanStringComparator.getInstance() or sortOrder is not exactly 3 different CharType.