×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




James,

Why not do the test for an unequal number of elements, and execute a return, before entering the loop?

-mark

At 9/2/09 06:53 PM, you wrote:
Hello All,
I don't know how often others have to do this, but every once in a while I
have to compare 2 collections and return an int value like the
Comparable.compareTo() contract.

Maybe I'm the only one that wants to do this or I'm implementing the objects
wrong, but I wrote a little utility class to compare 2 collections. Thought
I would share because there doesn't seem to be much out there.


import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
* @author James R Perkins (JRP)
* @version 1.0.0
*/
public class CollectionsUtil {
private CollectionsUtil() {

}

/**
* Compares the first collection against the second collection. Returns
a
* negative integer, zero or positive integer.
* <p>
* If the size of the first collection is greater than the size of the
* second collection, a positive integer is return. If the size of the
first
* collection is less than the size of the second collection a negative
* number is returned.
* </p>
*
* <p>
* If the size of the two collections is equal, then each element from
* collection 1 is compared to the element in the same position from
* collection 2.
* </p>
*
* @param <T>
* the type of the collection. Both collections must be the
same
* type and implement {@code java.lang.Comparable}.
* @param c1
* the first collection to be compared
* @param c2
* the second collection to be compared
* @return a negative integer, zero, or a positive integer as the first
* argument is less than, equal to, or greater than the second.
*/
public static <T extends Comparable<? super T>> int compare(
Collection<T> c1, Collection<T> c2) {
int c = c1.size() - c2.size();
List<T> l1 = new ArrayList<T>(c1);
List<T> l2 = new ArrayList<T>(c2);
for (int i = 0; i < l1.size(); i++) {
c = l1.get(i).compareTo(l2.get(i));
if (c != 0) {
break;
}
}
return c;
}
}


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.