Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public synchronized T next1() {
- ElementWrapper<T> ew = minHeap.remove();
- addNextElementFromCurrentIterator(ew);
- T currentElement = ew.getElement();
- while(nextElementHasTheSameKey(currentElement)) {
- ElementWrapper<T> nextEw = minHeap.remove();
- addNextElementFromCurrentIterator(nextEw);
- currentElement = merge.apply(currentElement, nextEw.getElement());
- }
- return currentElement;
- }
- @Override
- public T next2() {
- T currentElement;
- List<ElementWrapper> elementsWithTheSameKey = new LinkedList<>();
- synchronized (this) {
- ElementWrapper<T> ew = minHeap.remove();
- addNextElementFromCurrentIterator(ew);
- currentElement = ew.getElement();
- while (nextElementHasTheSameKey(currentElement)) {
- ElementWrapper<T> nextEw = minHeap.remove();
- addNextElementFromCurrentIterator(nextEw);
- elementsWithTheSameKey.add(nextEw);
- }
- }
- for(ElementWrapper<T> ew : elementsWithTheSameKey) {
- currentElement = merge.apply(currentElement, ew.getElement());
- }
- return currentElement;
- }
- private boolean nextElementHasTheSameKey(T currentElement) {
- return minHeap.peek() != null && minHeap.peek().getElement().compareTo(currentElement) == 0;
- }
- private void addNextElementFromCurrentIterator(ElementWrapper<T> elementWrapper) {
- if(elementWrapper.getIterator().hasNext()) {
- T element = elementWrapper.getIterator().next();
- minHeap.add(new ElementWrapper<>(element, elementWrapper.getIterator(), elementWrapper.getIndex()));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement