Definir conjuntos e mapas

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:

  • Criar conjuntos e mapas.
  • Descrever a diferença entre listas, conjuntos e mapas.
  • Decidir quando usar um conjunto em vez de uma lista.

Como você já sabe, uma lista é uma coleção organizada de itens com o mesmo tipo de dados. Cada item tem uma posição chamada de índice. Isso facilita recuperar itens na lista por um índice numerado. Mas as coleções do Apex são mais do que apenas listas. Os outros dois tipos de coleções são conjuntos e mapas.

Conjuntos

Até agora, você criou um tipo de coleção, uma lista. Um conjunto é um conjunto desordenado de itens únicos do mesmo tipo. Semelhante a uma lista, um conjunto é um grupo de itens, chamados elementos, e todos os elementos têm o mesmo tipo de dados, como sequência de caracteres, número inteiro ou até uma conta. Diferentemente de uma lista, um conjunto não apresenta nenhuma ordem específica de seus elementos. Uma vez que os elementos estão desordenados, um conjunto não pode ter duplicatas. Se você estiver tentando adicionar um elemento que já está no grupo, não receberá um erro, mas o novo valor não será adicionado ao grupo. Quando passamos por uma lista, sempre acessamos os itens na ordem em que eles foram adicionados à lista. Quando passamos por um conjunto, uma vez que os elementos estão desordenados, podemos acessar elementos em uma ordem aleatória.

Declarar um conjunto é como declarar uma lista, mas substituímos a palavra-chave List por Set. Vamos criar um conjunto de sequências de caracteres.

Criar um conjunto

  1. No Developer Console, clique em File (Arquivo)| New (Novo)| Apex Class (Classe do Apex).
  2. Insira Tea no nome da classe.
  3. Clique em OK.
  4. Substitua o código na classe Tea com este código:
    public class Tea{
        public static void orderTea(){
            Set<String> teaTypes = new Set <String>();
            teaTypes.add('Black');
            teaTypes.add('White');
            teaTypes.add('Herbal');
            system.debug(teaTypes);
        }
    }
  5. Clique em File (Arquivo) | Save (Salvar).

Executar o código

  1. Clique em Debug (Depurar) | Open Execute Anonymous Window (Abrir janela Executar no modo anônimo).
  2. Na janela Enter Apex Code (Inserir código do Apex), cole este código:
              Tea.orderTea();
  3. Selecione Open log (Abrir registro) e clique em Execute (Executar). O log de execução abre, exibindo os resultados da execução do seu código.
  4. Selecione Debug Only (Depurar somente) na parte inferior da janela.

O log de depuração mostra os três tipos de chá: Black, White e Herbal.

Definir métodos

Cada tipo de coleção tem seus próprios métodos. Você adicionou Black, White e Herbal a uma lista de tipos de chá com o método habitualmente usado add. Para saber mais sobre como definir métodos, confira os Recursos ao final desta unidade.

Adicionar um valor duplicado a um conjunto

  1. Na classe Tea, substitua o método orderTea (linhas 2-8) por este código:
    public static void orderTea(){
        Set<String> teaTypes = new Set <String>{'Black', 'White', 'Herbal'};
        system.debug(teaTypes);
        teaTypes.add('Green');
        teaTypes.add('Black');
        system.debug(teaTypes);
    }
  2. Clique em File (Arquivo) | Save (Salvar).

Executar o código

  1. Execute este código: Tea.orderTea();
    Dica: Clique em Debug (Depurar) | Execute Last (Executar último) para executar novamente o código que você já executou usando Execute Anonymous. Esta opção é conveniente quando você altera um método e o executa novamente da mesma forma.
  2. Revise o log de depuração.

A linha 4 exibe teaTypes no log, e assim você pode verificar o conteúdo do conjunto. As linhas 6 e 7 adicionam Green e Black ao conjunto. A linha 9 exibe teaTypes no log, e assim você pode verificar o conteúdo do conjunto novamente. Porque Black não foi adicionado ao conjunto? 

Não se esqueça de que conjuntos não permitem valores repetidos. Lembre-se também de que não é possível indexar um conjunto como fazemos com uma lista. Conjuntos são tipicamente usados para verificar se um determinado valor está incluído.

Escolher uma lista ou um conjunto

Você deve estar pensando, “Eu já sei usar listas e conjuntos. Como eu decido quais usar?" Pense na coleção que você quer criar e faça as seguintes perguntas.

  1. Quero permitir duplicatas?
  2. A ordem dos itens é importante?

Se você responder que sim a pelo menos uma dessas perguntas, então use uma lista. Se você responder que não a ambas as perguntas, use um conjunto. 

Você aprendeu sobre listas e conjuntos, mas há mais um tipo de coleção. Vamos falar sobre mapas em seguida.

Mapas

Um mapa é uma coleção mais complexa do que uma lista ou um conjunto. Cada item em um mapa tem duas partes; uma chave e um valor, conhecidos como par de chave-valor. Chaves e valores podem ser qualquer tipo de dados. Embora cada chave seja única, os valores podem ser repetidos dentro de um mapa. Imagine um mapa de códigos de país para telefones. O código de país é a chave e o nome do país é o valor. Cada código de país é único, mas os países podem ser duplicados (porque um país pode ter mais de um código de país). 

O método Put

Para adicionar pares chave-valor a um mapa, use o método put, conforme a seguir:

mapName.put (key, value);

O método put espera dois parâmetros: chave e valor. Vamos criar um mapa de tipos de chá (chaves) e seus perfis de sabor (valores). 

Tipos de chá e perfis de sabor

Tipos de chá (chave)
Perfil de sabor (valor)
Black
Earthy
Herbal
Sweet
White
Sweet

Criar um mapa

  1. Na classe Tea, substitua o código existente por este código:
    public class Tea{
        public static void orderTea(){
            Map <String, String> teaTypes = new Map <String, String>();
            teaTypes.put('Black', 'Earthy');
            teaTypes.put('White', 'Sweet');
            teaTypes.put('Herbal', 'Sweet');
            system.debug(teaTypes);
        }
    }
  2. Clique em File (Arquivo) | Save (Salvar).

Executar o código

  1. Execute este código: Tea.orderTea();
  2. Revise o log de depuração.

O log de depuração mostra que o mapa tem três pares chave-valor:

Black=Earthy, Herbal=Sweet, White=Sweet

Os valores Earthy e Sweet são perfis de sabor. Sweet é o perfil de sabor para dois tipos de chá porque valores duplicados são permitidos em um mapa.

O método Get

Para acessar valores em um mapa, use o método get, como o seguinte: 

mapName.get (key);

Quando fornecido com uma chave existente, o método get retorna o valor da chave. Se a chave fornecida não estiver mapeada para um valor, o método get retorna nulo. Lembre-se de que a declaração de mapa especifica o tipo de dados que ela espera para um valor de retorno. A variável que retorna um valor precisa ser o mesmo tipo de dados que a declaração do mapa especifica.

Valores Get de um mapa

  1. Na classe Tea, substitua o método orderTea (linhas 2-8) por este código:
    public static String orderTea(){
        Map <String, String> teaTypes = new Map <String, String>();
        teaTypes.put('Black', 'Earthy');
        teaTypes.put('White', 'Sweet');
        teaTypes.put('Herbal', 'Sweet');
        String flavorProfile = teaTypes.get('Herbal');
        System.debug('The flavorProfile of Herbal is: ' + flavorProfile);
        return flavorProfile;
    }
  2. Clique em File (Arquivo) | Save (Salvar).

Executar o código

  1. Execute este código:  Tea.orderTea();
  2. Revise o log de depuração.

Como o mapa teaTypes é declarado com valores de sequência de caracteres, o valor retornado precisa ser também uma sequência de caracteres (flavorProfile).

Agora você já conhece todos os três tipos de coleções do Apex. 

Tipo de coleção
Descrição
Lista
Um grupo ordenado de itens do mesmo tipo. Cada item tem um número de índice que representa sua posição na lista.
Conjunto
Um grupo desordenado de itens únicos do mesmo tipo.
Mapa
Uma coleção de pares chave-valor. Cada chave única mapeia para um único valor.

Em módulos mais avançados, você começará a consultar dados dentro da sua organização. Depois de recebidos os dados, são necessários locais para armazenar as informações. As coleções são úteis em fornecer armazenamento temporário. Se você quiser aprender mais sobre coleções, confira os links do Guia do Desenvolvedor do Apex na seção Recursos. 

Recursos