Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. @Override
  2. public synchronized T next1() {
  3. ElementWrapper<T> ew = minHeap.remove();
  4. addNextElementFromCurrentIterator(ew);
  5. T currentElement = ew.getElement();
  6. while(nextElementHasTheSameKey(currentElement)) {
  7. ElementWrapper<T> nextEw = minHeap.remove();
  8. addNextElementFromCurrentIterator(nextEw);
  9. currentElement = merge.apply(currentElement, nextEw.getElement());
  10. }
  11. return currentElement;
  12. }
  13.  
  14.  
  15. @Override
  16. public T next2() {
  17. T currentElement;
  18. List<ElementWrapper> elementsWithTheSameKey = new LinkedList<>();
  19. synchronized (this) {
  20. ElementWrapper<T> ew = minHeap.remove();
  21. addNextElementFromCurrentIterator(ew);
  22. currentElement = ew.getElement();
  23. while (nextElementHasTheSameKey(currentElement)) {
  24. ElementWrapper<T> nextEw = minHeap.remove();
  25. addNextElementFromCurrentIterator(nextEw);
  26. elementsWithTheSameKey.add(nextEw);
  27. }
  28. }
  29. for(ElementWrapper<T> ew : elementsWithTheSameKey) {
  30. currentElement = merge.apply(currentElement, ew.getElement());
  31. }
  32. return currentElement;
  33. }
  34.  
  35. private boolean nextElementHasTheSameKey(T currentElement) {
  36. return minHeap.peek() != null && minHeap.peek().getElement().compareTo(currentElement) == 0;
  37. }
  38.  
  39. private void addNextElementFromCurrentIterator(ElementWrapper<T> elementWrapper) {
  40. if(elementWrapper.getIterator().hasNext()) {
  41. T element = elementWrapper.getIterator().next();
  42. minHeap.add(new ElementWrapper<>(element, elementWrapper.getIterator(), elementWrapper.getIndex()));
  43. }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement