Why convert the Iterator back to a List?  You can just pass the Iterator itself into executeRunsAsync and stop when hasNext() == false.   If you assert in the constructor that there is at least one WriteRequest in the list, then you are guaranteed that the first call to next() will return a Run.