2017-09-06 1 views
1

J'ai une liste de modèles et un hashmap. La classe de modèle contient une variable telle que id (int), nom, adresse, etc. La hashmap, contient id (int) et distance (double). J'ai essayé d'utiliser Collection pour trier une liste de modèles avant, mais le problème ici est, je dois trier le hashmap par sa valeur de distance, puis ajuster l'arraylist en fonction de la façon dont le hashmap est trié. L'identifiant de hashmap et l'identifiant de la classe de modèle agissent ici comme une "clé étrangère". Quelqu'un at-il une idée de comment faire cela?Sorting ArrayListe du modèle connecté à un hashmap

Voici le hashmap:

HashMap<Integer, String> listDistance = new HashMap<Integer, String>(); 
listDistance.put(1, 3.22); 
listDistance.put(2, 2.57); 
listDistance.put(3, 6.32); 
listDistance.put(4, 8.82); 
listDistance.put(5, 1.32); 

Voici le arraylist:

ArrayList<Listing> listings = new ArrayList<Listing>(); 
listing.add(1, "asd", 123); 
listing.add(2, "ghf", 3434); 
listing.add(3, "ert", 876); 
listing.add(4, "tyi", 1267); 
listing.add(5, "ohg", 1345); 

Voici la classe modèle:

public class Listing { 

int id, count; 
String name; 

public Listing(int id, String name, int count) { 
    this.id = id; 
    this.count = count; 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public int getCount() { 
    return count; 
} 

public void setCount(int count) { 
    this.count = count; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

Le résultat de ce que je veux doit trier les pour devenir comme ceci:

  1. list.add (5, "ohg", 1345);
  2. list.add (2, "ghf", 3434);
  3. list.add (1, "asd", 123);
  4. list.add (3, "ert", 876);
  5. list.add (4, "tyi", 1267);

En fait, je n'ai pas essayé de faire quoi que ce soit pour que cela fonctionne, sauf penser le flux logique, car je suis assez hors de l'idée de la façon de le faire.

+2

montrez quelque chose sur lequel vous avez déjà travaillé. – Orvenito

+1

Essayez TreeMap au lieu de HashMap .., B/W Montrez-nous votre code –

+1

Pourriez-vous s'il vous plaît poster un code de votre modèle et la façon dont vous trier maintenant. – SachinSarawgi

Répondre

2

Vous pouvez trier la liste comme ceci:

Collections.sort(listing, (a,b) -> Double.compare(listDistance.get(a.getId()), 
                listDistance.get(b.getId()))); 

Voir le code en cours d'exécution à IDEONE.