Class ComparatorChain<E>

java.lang.Object
org.miaixz.bus.core.compare.ComparatorChain<E>
Type Parameters:
E - 被比较的对象
All Implemented Interfaces:
Serializable, Iterable<Comparator<E>>, Comparator<E>, Chain<Comparator<E>,ComparatorChain<E>>

public class ComparatorChain<E> extends Object implements Chain<Comparator<E>,ComparatorChain<E>>, Comparator<E>, Serializable
比较器链。此链包装了多个比较器,最终比较结果按照比较器顺序综合多个比较器结果 按照比较器链的顺序分别比较,如果比较出相等则转向下一个比较器,否则直接返回 此类copy from Apache-commons-collections
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Constructor Details

    • ComparatorChain

      public ComparatorChain()
      构造空的比较器链,必须至少有一个比较器,否则会在compare时抛出UnsupportedOperationException
    • ComparatorChain

      public ComparatorChain(Comparator<E> comparator)
      构造,初始化单一比较器。比较器为正序
      Parameters:
      comparator - 在比较器链中的第一个比较器
    • ComparatorChain

      public ComparatorChain(Comparator<E> comparator, boolean reverse)
      构造,初始化单一比较器。自定义正序还是反序
      Parameters:
      comparator - 在比较器链中的第一个比较器
      reverse - 是否反序,true表示反序,false正序
    • ComparatorChain

      public ComparatorChain(List<Comparator<E>> list)
      构造,使用已有的比较器列表
      Parameters:
      list - 比较器列表
      See Also:
    • ComparatorChain

      public ComparatorChain(List<Comparator<E>> list, BitSet bits)
      构造,使用已有的比较器列表和对应的BitSet BitSet中的boolean值需与list中的Comparator一一对应,true表示正序,false反序
      Parameters:
      list - Comparator 列表
      bits - Comparator 列表对应的排序boolean值,true表示正序,false反序
  • Method Details

    • of

      public static <E> ComparatorChain<E> of(Comparator<E> comparator)
      构建 ComparatorChain
      Type Parameters:
      E - 被比较对象类型
      Parameters:
      comparator - 比较器
      Returns:
      ComparatorChain
    • of

      public static <E> ComparatorChain<E> of(Comparator<E> comparator, boolean reverse)
      构建 ComparatorChain
      Type Parameters:
      E - 被比较对象类型
      Parameters:
      comparator - 比较器
      reverse - 是否反向
      Returns:
      ComparatorChain
    • of

      @SafeVarargs public static <E> ComparatorChain<E> of(Comparator<E>... comparators)
      构建 ComparatorChain
      Type Parameters:
      E - 被比较对象类型
      Parameters:
      comparators - 比较器数组
      Returns:
      ComparatorChain
    • of

      public static <E> ComparatorChain<E> of(List<Comparator<E>> comparators)
      构建 ComparatorChain
      Type Parameters:
      E - 被比较对象类型
      Parameters:
      comparators - 比较器列表
      Returns:
      ComparatorChain
    • of

      public static <E> ComparatorChain<E> of(List<Comparator<E>> comparators, BitSet bits)
      构建 ComparatorChain
      Type Parameters:
      E - 被比较对象类型
      Parameters:
      comparators - 比较器列表
      bits - Comparator 列表对应的排序boolean值,true表示正序,false反序
      Returns:
      ComparatorChain
    • addComparator

      public ComparatorChain<E> addComparator(Comparator<E> comparator)
      在链的尾部添加比较器,使用正向排序
      Parameters:
      comparator - Comparator 比较器,正向
      Returns:
      this
    • addComparator

      public ComparatorChain<E> addComparator(Comparator<E> comparator, boolean reverse)
      在链的尾部添加比较器,使用给定排序方式
      Parameters:
      comparator - Comparator 比较器
      reverse - 是否反序,true表示正序,false反序
      Returns:
      this
    • setComparator

      public ComparatorChain<E> setComparator(int index, Comparator<E> comparator) throws IndexOutOfBoundsException
      替换指定位置的比较器,保持原排序方式
      Parameters:
      index - 位置
      comparator - Comparator
      Returns:
      this
      Throws:
      IndexOutOfBoundsException - if index < 0 or index >= size()
    • setComparator

      public ComparatorChain<E> setComparator(int index, Comparator<E> comparator, boolean reverse)
      替换指定位置的比较器,替换指定排序方式
      Parameters:
      index - 位置
      comparator - Comparator
      reverse - 是否反序,true表示正序,false反序
      Returns:
      this
    • setForwardSort

      public ComparatorChain<E> setForwardSort(int index)
      更改指定位置的排序方式为正序
      Parameters:
      index - 位置
      Returns:
      this
    • setReverseSort

      public ComparatorChain<E> setReverseSort(int index)
      更改指定位置的排序方式为反序
      Parameters:
      index - 位置
      Returns:
      this
    • size

      public int size()
      比较器链中比较器个数
      Returns:
      Comparator count
    • isLocked

      public boolean isLocked()
      是否已经被锁定。当开始比较时(调用compare方法)此值为true
      Returns:
      true = ComparatorChain cannot be modified; false = ComparatorChain can still be modified.
    • iterator

      public Iterator<Comparator<E>> iterator()
      Specified by:
      iterator in interface Iterable<E>
    • addChain

      public ComparatorChain<E> addChain(Comparator<E> element)
      Description copied from interface: Chain
      加入责任链
      Specified by:
      addChain in interface Chain<Comparator<E>,ComparatorChain<E>>
      Parameters:
      element - 责任链新的环节元素
      Returns:
      this
    • compare

      public int compare(E o1, E o2) throws UnsupportedOperationException
      执行比较 按照比较器链的顺序分别比较,如果比较出相等则转向下一个比较器,否则直接返回
      Specified by:
      compare in interface Comparator<E>
      Parameters:
      o1 - 第一个对象
      o2 - 第二个对象
      Returns:
      -1, 0, or 1
      Throws:
      UnsupportedOperationException - 如果比较器链为空,无法完成比较
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object object)
      Specified by:
      equals in interface Comparator<E>
      Overrides:
      equals in class Object