private Iterator<MessageHandler> buildHandlerIterator(int size, final MessageHandler[] handlers) { int nextHandlerStartIndex = getNextHandlerStartIndex(size); MessageHandler[] reorderedHandlers = new MessageHandler[size]; System.arraycopy(handlers, nextHandlerStartIndex, reorderedHandlers, 0, size - nextHandlerStartIndex); System.arraycopy(handlers, 0, reorderedHandlers, size - nextHandlerStartIndex, nextHandlerStartIndex); return new Iterator<MessageHandler>() { int currentIndex = 0; public boolean hasNext() { return this.currentIndex < reorderedHandlers.length; } public MessageHandler next() { return reorderedHandlers[this.currentIndex++]; } public void remove() { throw new UnsupportedOperationException("Remove is not supported by this Iterator"); } }; }
/** * Returns an iterator that starts at a new point in the collection every time the * first part of the list that is skipped will be used at the end of the * iteration, so it guarantees all handlers are returned once on subsequent * <code>next()</code> invocations. */ public final Iterator<MessageHandler> getHandlerIterator(Message<?> message, Collection<MessageHandler> handlers) { int size = handlers.size(); if (size < 2) { this.getNextHandlerStartIndex(size); return handlers.iterator(); } return this.buildHandlerIterator(size, handlers.toArray(new MessageHandler[size])); }
private Iterator<MessageHandler> buildHandlerIterator(int size, final MessageHandler[] handlers) { int nextHandlerStartIndex = getNextHandlerStartIndex(size); MessageHandler[] reorderedHandlers = new MessageHandler[size]; System.arraycopy(handlers, nextHandlerStartIndex, reorderedHandlers, 0, size - nextHandlerStartIndex); System.arraycopy(handlers, 0, reorderedHandlers, size - nextHandlerStartIndex, nextHandlerStartIndex); return new Iterator<MessageHandler>() { int currentIndex = 0; public boolean hasNext() { return this.currentIndex < reorderedHandlers.length; } public MessageHandler next() { return reorderedHandlers[this.currentIndex++]; } public void remove() { throw new UnsupportedOperationException("Remove is not supported by this Iterator"); } }; }
/** * Returns an iterator that starts at a new point in the list every time the * first part of the list that is skipped will be used at the end of the * iteration, so it guarantees all handlers are returned once on subsequent * <code>next()</code> invocations. */ public final Iterator<MessageHandler> getHandlerIterator(final Message<?> message, final List<MessageHandler> handlers) { int size = handlers.size(); if (size == 0) { return handlers.iterator(); } int nextHandlerStartIndex = getNextHandlerStartIndex(size); List<MessageHandler> reorderedHandlers = new ArrayList<MessageHandler>( handlers.subList(nextHandlerStartIndex, size)); reorderedHandlers.addAll(handlers.subList(0, nextHandlerStartIndex)); return reorderedHandlers.iterator(); }
/** * Returns an iterator that starts at a new point in the collection every time the * first part of the list that is skipped will be used at the end of the * iteration, so it guarantees all handlers are returned once on subsequent * <code>next()</code> invocations. */ public final Iterator<MessageHandler> getHandlerIterator(Message<?> message, Collection<MessageHandler> handlers) { int size = handlers.size(); if (size < 2) { this.getNextHandlerStartIndex(size); return handlers.iterator(); } return this.buildHandlerIterator(size, handlers.toArray(new MessageHandler[size])); }