2015-11-24 1 views
-1

Comment trier un LinkedHashMap de tableaux int, en triant le premier élément dans le tableau dans l'ordre décroissant, et le second élément trié dans l'ordre croissant?Trier LinkedHashmap de tableau dans l'ordre croissant et décroissant - Java

par exemple.

No. Vol. Rank  becomes  No. Vol. Rank  
1  4  2      3  5  1 
2  4  1      1  4  2 
3  5  1      2  4  1 
4  2  5      4  2  5 

où N ° est la clé et Vol. et Rank sont les éléments dans le tableau int que le LinkedHashMap contient

+1

Créer une piste de classe, contenant 3 champs: nombre, volume, rang. Transformez votre carte en une carte (si vous avez vraiment besoin de cette carte). Extrayez les valeurs de la carte et stockez-les dans une liste . Triez la liste par volume. Afficher la liste triée . –

+2

Bienvenue sur SO. S'il vous plaît jeter un oeil à [demander], et montrez-nous votre travail! –

+0

vous ne pouvez pas mettre 4, 2 et 4, 1 dans la carte, la carte ne peut pas avoir la même clé deux fois –

Répondre

0

Cela n'a pas beaucoup de sens de demander comment trier un Map. Ce qui est logique, c'est de demander comment présenter les données dans une carte dans un certain ordre.

En supposant que vos données sont organisées comme suit:

Map<Integer,int[]> data; 

Vous pouvez récupérer les entrées dans l'ordre que vous voulez en utilisant les éléments suivants:

data.entrySet().stream() 
    .sorted(Map.Entry.comparingByValue(Comparator.comparingInt(a -> a[0]))) 
    ... 

Ce ruisseaux essentiellement les entrées de carte et les trie selon aux entiers extraits via l'expression lambda. Ce que vous faites avec les données dépend de vos besoins, mais vous pouvez filtrer, collecter vers une liste d'entrées ou une liste de clés, etc.

Enfin, ce n'est pas une excellente structure de données. Je vous suggère de ne pas stocker différents domaines de données (vol et rang) dans un tableau. Mieux vaut créer une classe et ensuite stocker les données sous forme de liste d'objets. Vous pouvez créer des cartes secondaires pour fournir un accès rapide si nécessaire. Cependant, cela n'est généralement pas nécessaire, sauf si vous avez des millions d'objets ou si vous avez une application de volume de transactions élevée.