Uploaded image for project: 'Commons Lang'
  1. Commons Lang
  2. LANG-536

Add isSorted() to ArrayUtils

    XMLWordPrintableJSON

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 3.4
    • Component/s: lang.*
    • Labels:
      None

      Description

      In my unit tests I often need to verify that an array is correctly sorted.
      In order to achieve this, I've got two helper methods as follows.
      Is it possible to integrate these methods into ArrayUtils?

          /**
           * Checks that the specified array of objects is in an ascending order
           * according to the specified comparator.  All elements in the array must be
           * <i>mutually comparable</i> by the specified comparator (that is,
           * <tt>c.compare(e1, e2)</tt> must not throw a <tt>ClassCastException</tt>
           * for any elements <tt>e1</tt> and <tt>e2</tt> in the array).
           *
           * @param a the array to be checked.
           * @param c the comparator to determine the order of the array.  A
           * <tt>null</tt> value indicates that the elements'
           * {@linkplain Comparable natural ordering} should be used.
           * @return {@code true}, if the array is sorted; {@code false}, otherwise.
           * @throws ClassCastException if the array contains elements that are
           * not <i>mutually comparable</i> using the specified comparator.
           */
          public static <T> boolean isSorted(final T[] a, final Comparator<? super T> c) {
              if (a.length <= 1) {
                  // Empty or singleton arrays are always sorted
                  return true;
              }
              // Otherwise, check that every element is not smaller than the previous
              T previous = a[0];
              for (int i = 1, n = a.length; i < n; i++) {
                  final T current = a[i];
                  if (c.compare(previous, current) > 0) {
                      return false;
                  }
                  previous = current;
              }
              return true;
          }
      
          /**
           * Checks that the specified array of objects is in an ascending order,
           * according to the {@linkplain Comparable natural ordering} of its elements.
           * All elements in the array must implement the {@link Comparable} interface.
           * Furthermore, all elements in the array must be <i>mutually comparable</i>
           * (that is, <tt>e1.compareTo(e2)</tt> must not throw a <tt>ClassCastException</tt>
           * for any elements <tt>e1</tt> and <tt>e2</tt> in the array).
           *
           * @param a the array to be checked.
           * @return {@code true}, if the array is sorted; {@code false}, otherwise.
           * @throws ClassCastException if the array contains elements that are not
           * <i>mutually comparable</i> (for example, strings and integers).
           */
          @SuppressWarnings({"unchecked"})
          public static <T> boolean isSorted(final T[] a) {
              if (a.length <= 1) {
                  // Empty or singleton arrays are always sorted
                  return true;
              }
              // Otherwise, check that every element is not smaller than the previous
              T previous = a[0];
              for (int i = 1, n = a.length; i < n; i++) {
                  final T current = a[i];
                  if (((Comparable<? super T>) previous).compareTo(previous) > 0) {
                      return false;
                  }
                  previous = current;
              }
              return true;
          }
      
      

        Attachments

        1. LANG-536.diff
          20 kB
          James Sawle
        2. perftest.zip
          4 kB
          Duncan Jones

          Activity

            People

            • Assignee:
              dmjones500 Duncan Jones
              Reporter:
              sergei_ivanov Sergei Ivanov
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: