package org.limewire.collection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.limewire.collection.Trie.Cursor;
/**
* Miscellaneous utilities for Tries. See <a
* href="http://en.wikipedia.org/wiki/Trie">Trie</a> for more information.
*/
public final class TrieUtils {
private TrieUtils() {}
public static <K,V> List<V> select(Trie<K,V> trie, K key, int count) {
return select(trie, key, count, null);
}
public static <K,V> List<V> select(Trie<K,V> trie, K key,
int count, final Cursor<K,V> cursor) {
final int size = Math.min(trie.size(), count);
final List<V> values = new ArrayList<V>(size);
trie.select(key, new Cursor<K,V>() {
public Cursor.SelectStatus select(Entry<? extends K, ? extends V> entry) {
if (cursor == null || cursor.select(entry) == Cursor.SelectStatus.EXIT) {
values.add(entry.getValue());
}
return values.size() >= size ? Cursor.SelectStatus.EXIT : Cursor.SelectStatus.CONTINUE;
}
});
return values;
}
}