HOWTO · Java
Crie um map ordenado em Java
Este artigo apresenta como criar um map ordenado em Java.
Nesta página
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