Eu tenho um mapa que possui seqüências de caracteres para chaves e valores.
Os dados são como a seguir:
"pergunta1", "1"
"pergunta9", "1"
"pergunta2", "4"
"pergunta5", "2"
Quero classificar o mapa com base em suas chaves. Então, no final, terei question1, question2, question3
... e assim por diante.
Eventualmente, estou tentando obter duas seqüências de caracteres deste mapa.
- Primeira seqüência: perguntas (na ordem 1 ..10)
- Segunda String: Respostas (na mesma ordem que a pergunta)
No momento, tenho o seguinte:
Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry) it.next();
questionAnswers += pairs.getKey() + ",";
}
Isso me faz as perguntas em uma sequência, mas elas não estão em ordem.
fonte
Supondo que o TreeMap não seja bom para você (e supondo que você não possa usar genéricos):
fonte
Usando o
TreeMap
você pode classificar o mapa.fonte
Use um TreeMap !
fonte
Se você já possui um mapa e gostaria de classificá-lo nas teclas, basta usar:
Um exemplo de trabalho completo:
fonte
Basta usar o TreeMap
Esteja ciente de que o TreeMap é classificado de acordo com a ordem natural de suas 'chaves'
fonte
Desde que você não possa usar
TreeMap
, no Java 8 , podemos usar o método toMap () noCollectors
qual utiliza os seguintes parâmetros:Exemplo de Java 8
Podemos modificar o exemplo para usar o comparador personalizado e classificar com base nas chaves como:
fonte
Usando o Java 8:
fonte
Esse código pode classificar um mapa de valores-chave em ambas as ordens, por exemplo, crescente e decrescente.
Como um exemplo:
fonte
No Java 8
Para classificar uma
Map<K, V>
por chave, coloque as chaves emList<K>
:Para classificar uma
Map<K, V>
por chave, coloque as entradas emList<Map.Entry<K, V>>
:Por último, mas não menos importante: para classificar strings de maneira sensível ao código do idioma - use uma classe Collator (comparador):
fonte
fonte
No Java 8, você também pode usar .stream (). Sorted ():
fonte
Também podemos classificar a chave usando o método Arrays.sort.
fonte
Apenas no caso de você não querer usar um
TreeMap
Além disso, caso você queira classificar seu mapa com base em
values
apenas alterarMap.Entry::getKey
paraMap.Entry::getValue
fonte