fun > intersectSorted( first: Iterable, second: Iterable ) = intersectSorted(first, second, naturalOrder()) fun intersectSorted( first: Iterable, second: Iterable, comparator: Comparator ): List { val iter1 = first.iterator() val iter2 = second.iterator() return if (iter1.hasNext() && iter2.hasNext()) buildList { var it1 = iter1.next() var it2 = iter2.next() while (true) { val cmp = comparator.compare(it1, it2) if (cmp == 0) add(it1) if (cmp <= 0) it1 = if (iter1.hasNext()) iter1.next() else return@buildList if (cmp >= 0) it2 = if (iter2.hasNext()) iter2.next() else return@buildList } } else emptyList() }