Есть ли реализация MergeIterator?

Предоставляет ли какая-либо из существующих библиотек коллекций (guava, commons-collection) MergeIterator, созданный с помощью:

MergeIterator(Iterator<Comparable> iters...)

и затем (при условии, что исходные итераторы отсортированы) проходит через итераторы параллельно и возвращает элементы по порядку?

[1,3,5] + [2,8] => [1,2,3,5,8]

Это было бы весело написать, но я бы не хотел изобретать велосипед.

2 ответа

Решение

Iterators.mergeSorted в гуаве такая вещь.

Вы можете использовать CollatingIterator commons-collection:

 List<Integer> list1 = Arrays.asList(1, 3, 5);
 List<Integer> list2 = Arrays.asList(2, 8);

 Iterator<Integer> merged =
    IteratorUtils.collatedIterator(ComparatorUtils.NATURAL_COMPARATOR,
                                   list1.iterator(), list2.iterator());

 System.out.println(IteratorUtils.toList(merged));

Это напечатает следующее:

 [1, 2, 3, 5, 8]
Другие вопросы по тегам