@Override protected void createUpcomingSelection() { if (!rightSubSelectionIterator.hasNext()) { if (!leftSubSelectionIterator.hasNext()) { upcomingSelection = null; return; } leftSubSelection = leftSubSelectionIterator.next(); if (!leftEqualsRight) { rightSubSelectionIterator = rightSubSelector.listIterator(); if (!rightSubSelectionIterator.hasNext()) { upcomingSelection = null; return; } } else { // Select A-B, A-C, B-C. Do not select B-A, C-A, C-B. Do not select A-A, B-B, C-C. if (!leftSubSelectionIterator.hasNext()) { upcomingSelection = null; return; } rightSubSelectionIterator = rightSubSelector.listIterator(leftSubSelectionIterator.nextIndex()); // rightEntityIterator's first hasNext() always returns true because of the nextIndex() } } SubS rightSubSelection = rightSubSelectionIterator.next(); upcomingSelection = newSwapSelection(leftSubSelection, rightSubSelection); }
public AbstractOriginalSwapIterator( ListIterable<SubS> leftSubSelector, ListIterable<SubS> rightSubSelector) { this.leftSubSelector = leftSubSelector; this.rightSubSelector = rightSubSelector; leftEqualsRight = (leftSubSelector == rightSubSelector); leftSubSelectionIterator = leftSubSelector.listIterator(); rightSubSelectionIterator = IteratorUtils.emptyListIterator(); createUpcomingSelection(); }