docs: public static final <T,U extends Range<T>> U best(Iterator<U> iterator, Comparator<U> comp)
      {
          List<U> list = new ArrayList<>();
          ListIterator<U> li = list.listIterator();
          if (!iterator.hasNext())
          {
              throw new IllegalArgumentException("empty");
          }
          U prev = iterator.next();
          li.add(prev);
          while (iterator.hasNext())
          {
              U next = iterator.next();
              if (!prev.isOverlapping(next) || CollectionHelp.compare(prev, next, comp) >= 0)
              {
                  break;
              }
              prev = next;
              li.add(prev);
          }
          Range<T> top = li.previous();
          while (li.hasPrevious())
          {
              Range<T> p = li.previous();
              if (top.isOverlapping(p))
              {
                  li.remove();
              }
              else
              {
                  top = p;
              }
          }
          return list.get(0);
      }