Just a quick question: why should an iterator provide a setComparator method? What happens if this is called after any calls to next? 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 > > >
