Class HumanComparator

java.lang.Object
org.apache.wiki.util.comparators.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().
  • Nested Class Summary

    Nested Classes
    Modifier and Type Class Description
    static class  HumanComparator.CharType  
  • Field Summary

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

    Constructors
    Constructor Description
    HumanComparator()
    Default constructor which does nothing.
    HumanComparator​(HumanComparator.CharType[] sortOrder)
    Constructor specifying all the character type order.
  • Method Summary

    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
  • Field Details

  • Constructor Details

    • HumanComparator

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

      public HumanComparator​(HumanComparator.CharType[] sortOrder)
      Constructor specifying all the character type order.
      Parameters:
      sortOrder - see setSortOrder
  • Method Details

    • 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>
    • getSortOrder

    • 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.