[
https://issues.apache.org/jira/browse/LANG-536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14171314#comment-14171314
]
James Sawle commented on LANG-536:
----------------------------------
Thank you for your feedback, I will go through and make the changes to the
Javadoc and testing this evening.
With respect to the primitives, thinking about it, this is a less than ideal
solution, but the alternative of having so many copies of the same code will
make the class even less maintainable that it already is (will create an issue
to remove some methods that can be combined with generics later).
The neater alternative would be to create these methods to act upon collections
using the iterator (will make it private for now). We can then convert
everything to an ArrayList (will also fashion a lazy ArrayList impl similar to
that within Collections as can't use the library :/ which will solve your
performance concerns whilst keeping the code base as clean as possible).
How does this sound? Whilst there is some repetition with another Apache
library, the implementation could be used in more places within the class to
tidy up the code base even more.
> Add isSorted() to ArrayUtils
> ----------------------------
>
> Key: LANG-536
> URL: https://issues.apache.org/jira/browse/LANG-536
> Project: Commons Lang
> Issue Type: New Feature
> Components: lang.*
> Reporter: Sergei Ivanov
> Priority: Minor
> Fix For: Review Patch
>
> Attachments: LANG-536.patch
>
>
> 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?
> {code}
> /**
> * 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;
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)