sclass OrderedMultiIterator> { srecord noeq Stream(Iterator iterator, A element) is Comparable> { public int compareTo(Stream stream) { ret element.compareTo(stream.element); } } new TreeSet streams; void add(Iterator iterator) { if (iterator == null || !iterator.hasNext()) ret; A element = iterator.next(); streams.add(new Stream(iterator, element)); } void addAll(Iterable> iterators) { fOr (it : iterators) add(it); } }