package com.browseengine.bobo.util; import java.util.Comparator; import java.util.Iterator; import java.util.TreeMap; public class ResultMerger { public static <T> Iterator<T> mergeResults(final Iterator<T>[] results, final Comparator<T> comparator) { return new Iterator<T>() { TreeMap<T, Iterator<T>> map = new TreeMap<T, Iterator<T>>(comparator); { for (Iterator<T> result : results) { if (result.hasNext()) { map.put(result.next(), result); } } } @Override public boolean hasNext() { return map.size() > 0; } @Override public T next() { T first = map.firstKey(); Iterator<T> iter = map.remove(first); while (iter.hasNext()) { T next = iter.next(); if (!map.containsKey(next)) { map.put(next, iter); break; } } return first; } @Override public void remove() { T first = map.firstKey(); Iterator<T> iter = map.remove(first); while (iter.hasNext()) { T next = iter.next(); if (!map.containsKey(next)) { map.put(next, iter); break; } } } }; } }