maneira fácil de obter um subconjunto do conjunto de chaves de um TreeMap (em Java)
Pergunta
É possível extrair o topo n (eu uso topo, porque eu acredito que um TreeMap é classificada) elementos-chave de um TreeMap, sem iteração usando um objeto Iterator.
Eu posso fazer a iteração mas é tedioso ter que verificar se há valores nulos etc.
Solução
Por que você iria ser a verificação de nulos?
Se você usar o Google Collections Biblioteca você pode usar Iterables.limit .
EDIT: Por alguma razão a página GCL não inclui limit
, mas é na Goiaba ( que efetivamente substituiu o GCL) - ainda é Iterables.limit
.
Outras dicas
Você pode facilmente obter o subconjunto de chaves de uma tecla para cima para outro usando .subMap(low,high).keySet()
ou .headMap(high).keySet()
.
Descobrir a alta chave correta para o n th é mais difícil, porque não há nenhuma abordagem direta e iteração é a única maneira do certo-fogo.
(este código é não testado )
public <K,V> SortedMap<K,V> subMap(SortedMap<K,V> map, int n) {
Iterator<K> it = map.keySet().iterator();
for (int i = 0; i<n && it.hasNext(); i++) {
it.next();
}
if (it.hasNext()) {
return map.headMap(it.next());
} else {
return map
}
}
Você pode usar:
[método submap] [1]
public NavigableMap<K,V> subMap(K fromKey,boolean fromInclusive,K toKey,boolean toInclusive)
[1]: http : //java.sun.com/javase/6/docs/api/java/util/TreeMap.html#subMap (K , boolean, K, boolean)