@startuml StringMergingIterator actor Actor as a participant StringMergingIterator as smi entity Iterator1 as i1 entity Iterator2 as i2 a -> smi : next() smi -> i1 : hasNext() i1 -> smi : true smi -> i2 : hasNext() i2 -> smi : true smi -> i1 : next() i1 -> smi : next value smi -> a : next value a -> smi : next() smi -> i1 : hasNext() i1 -> smi : true smi -> i2 : hasNext() i2 -> smi : true smi -> i2 : next() i2 -> smi : next value smi -> a : next value a -> smi : next() smi -> i1 : hasNext() i1 -> smi : false smi -> i2 : next() i2 -> smi : next value smi -> a : next value @enduml