On 06/04/2012 03:40 PM, James Ring wrote: > Just a quick question: why should an iterator provide a setComparator > method? What happens if this is called after any calls to next?
Hi, this behavior is indeed strange and I do not understand the reason behind it. Maybe it is related to dependency injection. I closed the issue as the problem at hand is "solved" right now, but we should discuss if the current situation is right. Thomas > On Jun 3, 2012 4:21 AM, "Thomas Neidhart (JIRA)" <[email protected]> wrote: > >> >> [ >> https://issues.apache.org/jira/browse/COLLECTIONS-377?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel] >> >> Thomas Neidhart resolved COLLECTIONS-377. >> ----------------------------------------- >> >> Resolution: Duplicate >> Fix Version/s: 4.0 >> >> This has been fixed as part of [COLLECTIONS-331]. Now the javadoc states >> that a comparator *must* be provided (either via constructor or by calling >> setComparator afterwards) before using the iterator. >> >>> CollatingIterator throws NullPointerException when constructor is given >> null (or no) Comparator >>> >> ----------------------------------------------------------------------------------------------- >>> >>> Key: COLLECTIONS-377 >>> URL: >> https://issues.apache.org/jira/browse/COLLECTIONS-377 >>> Project: Commons Collections >>> Issue Type: Bug >>> Components: Iterator >>> Affects Versions: 3.2 >>> Environment: Java 1.6.0_26 >>> Reporter: Ryan Hochstetler >>> Priority: Minor >>> Fix For: 4.0 >>> >>> >>> CollatingIterator's javadoc ( >> http://commons.apache.org/collections/api-release/index.html) states that >> natural sort ordering will be used when null is passed as the Comparator >> argument to any of the constructors accepting one (and for the nullary >> constructor). The following stack is thrown from the subsequent unit test. >> The implementation of least() does not appear to account for the natural >> sort order case. >>> java.lang.NullPointerException >>> at >> org.apache.commons.collections.iterators.CollatingIterator.least(CollatingIterator.java:334) >>> at >> org.apache.commons.collections.iterators.CollatingIterator.next(CollatingIterator.java:230) >>> at mil.af.statistics.jutl.collection.MutableDataSeriesTest... >>> @SuppressWarnings("unchecked") >>> @Test >>> public void testCollatingIteratorNaturalOrdering() throws Exception >>> { >>> Integer[] expected = >>> { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), >> Integer.valueOf(4), Integer.valueOf(5), >>> Integer.valueOf(6) }; >>> List<Integer> evens = Arrays.asList(new Integer[] >>> { Integer.valueOf(2), Integer.valueOf(4), Integer.valueOf(6) }); >>> List<Integer> odds = Arrays.asList(new Integer[] >>> { Integer.valueOf(1), Integer.valueOf(3), Integer.valueOf(5) }); >>> Iterator<Integer> collatingIter = new CollatingIterator(null, >> evens.iterator(), odds.iterator()); >>> for (Integer expectedInt : expected) >>> { >>> assertTrue(collatingIter.hasNext()); >>> assertEquals(expectedInt, collatingIter.next()); >>> } >>> } >>> Workaround: provide a Comparator that implements the natural ordering >> contract. >> >> -- >> This message is automatically generated by JIRA. >> If you think it was sent incorrectly, please contact your JIRA >> administrators: >> https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa >> For more information on JIRA, see: http://www.atlassian.com/software/jira >> >> >> >
