private MoveResult move(Iterator<MailboxMessage> originalRows, MailboxSession session) throws MailboxException { final List<MessageMetaData> movedRows = new ArrayList<>(); final List<MessageMetaData> originalRowsCopy = new ArrayList<>(); final MessageMapper messageMapper = mapperFactory.getMessageMapper(session); while (originalRows.hasNext()) { final MailboxMessage originalMessage = originalRows.next(); originalRowsCopy.add(new SimpleMessageMetaData(originalMessage)); MessageMetaData data = messageMapper.execute( () -> messageMapper.move(getMailboxEntity(), originalMessage)); movedRows.add(data); } return new MoveResult(movedRows.iterator(), originalRowsCopy.iterator()); }