Crie um map ordenado em Java

Rashmi Patidar 12 outubro 2023
  1. Classifique o map usando a classe TreeMap em Java
  2. Criar uma ordem de map usando funções Java 8
Crie um map ordenado em Java

Um map é uma estrutura de dados em Java que armazena pares de chave e valor. O map é uma interface presente na hierarquia Collection. Essas chaves são exclusivas, portanto, nenhuma chave duplicada é permitida; no entanto, as variáveis ​​mapeadas para a chave podem ter valores duplicados. Classes como HashMap, LinkedHashMap e TreeMap implementam a interface Map.

Classifique o map usando a classe TreeMap em Java

Abaixo, o programa demonstra a ordem do map no programa Java.

import java.util.TreeMap;

public class Main {
  public static void main(String[] args) {
    TreeMap<String, Integer> map = new TreeMap<String, Integer>();
    map.put("Third", 1);
    map.put("First", 2);
    map.put("Second", 3);

    for (String key : map.keySet()) {
      System.out.println(key + " ,ID = " + map.get(key));
    }
  }
}

A classe TreeMap classifica os valores do map em ordem crescente. Ele também implementa a interface SortedMap internamente, de modo que uma instância do map é criada usando uma nova palavra-chave.

O tipo de dados dentro do map de árvore é especificado no momento da instanciação. A chave Map é do tipo String e seu valor é do tipo Integer.

A função put insere os pares de valores-chave no map de árvore. Agora, um loop for-each é definido para iterar no map. Em Java, a iteração direta sobre o map não é possível. Assim, as chaves do map são inicialmente convertidas em uma instância Set.

A função map.keySet retorna o Set de chaves presentes no map. Esta função está na classe TreeMap e retorna a visualização ordenada das chaves presentes. A função get obtém o valor correspondente à chave.

Abaixo está a saída em ordem crescente.

First, ID = 2 Second, ID = 3 Third, ID = 1

Criar uma ordem de map usando funções Java 8

Java 8 fornece suporte para programação funcional que permite aos usuários trabalhar na cadeia de funções.

Streams é uma interface no pacote java.util que fornece uma facilidade para trabalhar sobre as operações sequenciais em uma única instrução. A função Streams funciona no pipeline onde um emissor emite dados; ele é filtrado, processado, transformado e muito mais, dependendo das necessidades dos usuários.

package F09;

import static java.util.AbstractMap.SimpleEntry;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MapOrdering {
  public static void main(String[] args) {
    Map<String, String> mapSortedByKey =
        Stream
            .of(new SimpleEntry<>("key3", "value1"), new SimpleEntry<>("key1", "value2"),
                new SimpleEntry<>("key2", "value3"))
            .sorted(Map.Entry.comparingByKey())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (oldVal, newValue) -> oldVal, LinkedHashMap::new));

    System.out.println();
    System.out.print("Ordered List: ");
    for (String s1 : mapSortedByKey.keySet()) {
      System.out.print(" " + s1);
    }
  }
}

A interface Stream fornece várias funções e obtém a sua implementação em diferentes classes para trabalhar sobre elas. Aqui, o fluxo de pares de valores-chave é formado usando a classe new SimpleEntry. Os valores são inseridos na função of para formar um fluxo.

Na série em cadeia, a função sorted é chamada. A função usa uma instância Comparator para organizar as chaves em uma sequência dependendo da ordem definida. A função comparingByKey retorna o comparador que compara a chave em ordem ascendente natural.

A função sorted finalmente retorna um fluxo de valores organizados em ordem crescente. A função collect da classe Stream coleta os valores de map fornecidos em uma nova instância LinkedHashMap. A classe preserva a ordem de inserção da sequência fornecida. A função usa a instância Collector como parâmetro.

O primeiro parâmetro é uma função toMap do fornecedor que cria um novo contêiner. O segundo parâmetro é BiConsumer que acumula o valor, e o último parâmetro é BiConsumer que atua como um combinador que mescla os resultados. Assim, o comando LinkedHashMap::new combina o resultado e retorna a instância formada.

A instância mapSortedByKey agora contém os elementos do map sequencial que são iterados usando o loop for-each acima. As chaves de map resultantes são impressas na saída padrão abaixo.

Ordered List : key1 key2 key3
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artigo relacionado - Java Map

Artigo relacionado - Java Sort