Crie um map ordenado em Java

  1. Classifique o map usando a classe TreeMap em Java
  2. Criar uma ordem de map usando funções Java8

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 Java8

Java8 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 java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.AbstractMap.SimpleEntry;

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

Artigo relacionado - Java Map

  • Como obter a chave do valor em Java Hashmap
  • Como Iterar Sobre Cada Elemento do Mapa em Java
  • Artigo relacionado - Java Sort

  • Crie um map em Java
  • Como ordenar um mapa por valor em Java