maneira fácil de obter um subconjunto do conjunto de chaves de um TreeMap (em Java)

StackOverflow https://stackoverflow.com/questions/577358

  •  05-09-2019
  •  | 
  •  

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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top