2017-10-12 5 views
-1

J'ai deux ArrayLists comme ci-dessous; Comme le nom l'indique sortedDtos est déjà trié.Ordre d'une liste d'objets dans le même ordre qu'une autre liste d'objets avec des objets ayant un attribut commun

`myclass` has a field called `jobNo` 
The HashMap has a key called `jobNo` 

Fondamentalement, je veux commander mapList basé sur sortedDtos en comparant l'attribut jobNo.

Comment puis-je faire cela dans Java 8?

Cela semble fonctionner correctement, peut également être probablement rendu plus efficace.

List<String> jobNos = new ArrayList(); 
      sortedDtos.stream().forEach(dto -> jobNos.add(dto.getJobNo())); 

      // sort maplist based on the sorting of the dtos 
      mapList.sort(Comparator.comparing(el -> jobNos.indexOf(el.get("jobNo")))); 
+0

Veuillez fournir quelques exemples d'entrée et de sortie attendue. Il est difficile de comprendre ce que vous essayez de faire ici. –

+0

* Cela semble fonctionner correctement, peut également être rendu plus efficace * ... https: //codereview.stackexchange.com/? – nullpointer

+0

Je vote pour fermer cette question hors-sujet parce que cette question appartient à un autre site du réseau Stack Exchange - https://codereview.stackexchange.com/ – nullpointer

Répondre

0

Je vais suggérer la façon suivante. Cette approche implique de fournir votre propre comparateur personnalisé pour trier la carte.

Collections.sort(mapList, new Comparator<HashMap<String, String>>() { 
     List<String> list = sortedDtos.stream().map(l -> l.jobNo).collect(Collectors.toList()); 
     public int compare(HashMap<String, String> map1, HashMap<String, String> map2) { 
      if(list.indexOf(map1.get("jobNo")) < list.indexOf(map2.get("jobNo"))) { 
       return -1; 
      } 
      else if(list.indexOf(map1.get("jobNo")) > list.indexOf(map2.get("jobNo"))) { 
       return 1; 
      } 
      else { 
       return 0; 
      } 
     } 
    });