Tutorial do HierarchicalMap

HierarchicalMap é uma interface. Assim, qualquer um pode implementá-la. Este tutorial é baseado em BasicHierarchicalmap, uma implementação referência em Java da interfae HierarchicalMap.

Este tutorial abrange os seguintes assuntos:

    Nível Básico
  1. O Primeiro Contato
  2. Criação de Estruturas
  3. Recuperação dos Dados
  4. Interação com Coleções
  5. Reestruturação do Mapa

  6. Nível Intermediário
  7. Trabalhando com Stream
  8. Trabalhando com XML
  9. Trabalhando com XML Grande
  10. Acessando Banco de Dados
  11. Acessando Preferências

  12. Nível Avançado
  13. Preenchimento de Template (inglês)
  14. Interoperabilidade com .NET (inglês)
  15. Runtime schema validation (inglês)

(O recurso de Javascript precisa estar habilitado, no seu navegador, para permitir a visualização dos códigos utilizados nos exemplos deste tutorial)

Nível Basico

1. O Primeiro Contato

A interface HierarchicalMap é composta por três conjutos principais de métodos e alguns métodos auxiliares:

  • Operações de recuperação: get(key)
  • Operações de alteração de estrutura: put(key, value), add(key, value), addAll(key, collection), remove(key) e removeAll(key)
  • Operações sobre coleções: values(), keySet(), entrySet() e getAll(key)
  • Métodos auxiliares: newInstance(), size(), add(key) e addAll(HierarchicalMap)
  • Segue abaixo o nosso primeiro código de exemplo (clássico):

    Como pode ser visto, HierarchicalMap se comporta exatamente como um HashMap quando se utiliza uma chave simples.

    2. Criação de Estruturas

    Agora, iremos criar uma estrutura um pouco mais complexa:

    Nesta estrutura, cada círculo representa um nó (que é uma instância da HierarchicalMap), e cada retângulo representa uma folha, que pode ser qualquer objeto (como por exemplo uma instância de java.lang.String). Um nó pode conter outros nós como no caso do "Pedido" e do "Endereço", ou uma folha como no caso do "tipo", "Cidade", "Estado" e do "CEP".

    O trecho de código abaixo cria uma estrutra de dados representando o diagrama acima:

    O método "add" possui uma outra assinatura que recebe somente a chave, sem o valor. Neste caso, uma nova instância da HierarchicalMap é criada e adicionada sob a chave. Desta forma, o segundo endereço poderia ser adicionado de forma diferente como no exemplo abaixo:

    3. Recuperação dos Dados

    Uma vez criada a estrutra, os dados podem ser recuperadas:

    O código da Listagem acima resulta na seguinte saída:

    Sta Clara
    SP
    

    Note que a operação get recupera somente um item de cada vez, e no caso de possuir mais itens, o primeiro dado inserido é retornado. Assim, mesmo havendo duas cidades armazenadas na estrutura, a primeira cidade, no caso "Sta Clara", foi obtida no exemplo anterior. Por outro lado, o valor retornado para o estado foi "SP", pois a operação foi efetuada sobre o nó "endereco2". Para obter todos os itens de uma mesma chave, deve-se utilizar a operação getAll:

    O resultado da execução do código acima será:

    Sta Clara
    São Paulo
    
    4. Interação com Coleções

    A estrutura de dados pode ser percorrida através de Iterator:

    A saída produzida será:

    Address
    type : Billing
    City : Sta Clara
    State : CA
    ZIP code : 95054
    
    Address
    type : Shipping
    City : São Paulo
    State : SP
    ZIP code : 04717-004
    
    5. Reestruturação do Mapa

    Apesar da estrutura utilizada até então estar em conformidade com a recomendação da W3C, não conseguimos extrair a vantagem da HierarchicalMap. Informações organizadas desta maneira, não permite acessar aos dados internos de forma direta (ex. recuperar o estado do endereço de entrega). Este acesso direto, pode ser obtido através de uma pequena reestruturação na HierarchicalMap. Assim, podemos implementar um método como o que está descrito a seguir:

    Com o métdod acima, podemos transformar o mapa original para uma estutura como abaixo:

    Agora, podemos reucperar de forma mais direta:

    O resultado será:

    Estado para Entrega: SP
    Estado para a Faturamento: CA

    O método abaixo consegue reoganizar o mapa, de volta para estrutura original:


    Realmente, isto é tudo sobre HierarchicalMap. Como pode ver é tão simples como isso.

    Porém, podemos aplicar esta interface em soluções mais interessantes e algumas vezes mais complexas.

    Continua para Nível Intermediário