Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6417C17582 for ; Tue, 14 Oct 2014 20:02:35 +0000 (UTC) Received: (qmail 97673 invoked by uid 500); 14 Oct 2014 20:02:35 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 97577 invoked by uid 500); 14 Oct 2014 20:02:34 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 97475 invoked by uid 99); 14 Oct 2014 20:02:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Oct 2014 20:02:34 +0000 Date: Tue, 14 Oct 2014 20:02:34 +0000 (UTC) From: "Duncan Jones (JIRA)" To: issues@commons.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (LANG-536) Add isSorted() to ArrayUtils MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/LANG-536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14171436#comment-14171436 ] Duncan Jones commented on LANG-536: ----------------------------------- bq. You wished for the Object's compareTo methods to still be used. This would lead to boxing at the time of calling and hence on every request extra overhead would be encountered. I'm refererring to, e.g., [{{Double.compareTo(double a, double b)}}|http://docs.oracle.com/javase/8/docs/api/java/lang/Double.html#compare-double-double-], which doesn't auto-box. bq. Speed must not be considered as the only factor, maintenance, testing and binary size should also be considered. I agree there are significant benefits to maintainable code. I'm not saying using object arrays is evil, it just had me initially a little concerned. I will do some benchmarking to see how significant the difference is. There is a balance to be struck here, clearly. > 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 > * mutually comparable by the specified comparator (that is, > * c.compare(e1, e2) must not throw a ClassCastException > * for any elements e1 and e2 in the array). > * > * @param a the array to be checked. > * @param c the comparator to determine the order of the array. A > * null 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 mutually comparable using the specified comparator. > */ > public static boolean isSorted(final T[] a, final Comparator 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 mutually comparable > * (that is, e1.compareTo(e2) must not throw a ClassCastException > * for any elements e1 and e2 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 > * mutually comparable (for example, strings and integers). > */ > @SuppressWarnings({"unchecked"}) > public static 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) previous).compareTo(previous) > 0) { > return false; > } > previous = current; > } > return true; > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)