2017-10-11 2 views
-1

Il y a deux Map, le premier contient l'identification de l'étudiant et le nom. le second contient l'identifiant de l'étudiant et le statut de «réussite» ou «échec». Il existe une méthode qui prend deux paramètres de type Map et renvoie Map.Obtenir la clé de la carte et la valeur de deux différents Map avec la clé et vlue dans Java

//1st Map 
    Map<Integer, String> map1 = new HashMap<>(); 
    map1.put(1, "x"); 
    map1.put(2, "y"); 
    map1.put(3, "z"); 
    map1.put(4, "a"); 
    map1.put(5, "b");` 

et

//2nd Map 
    Map<Integer, String> map2 = new HashMap<>(); 
    map2.put(1, "fail"); 
    map2.put(2, "fail"); 
    map2.put(3, "fail"); 
    map2.put(4, "pass"); 
    map2.put(5, "pass");` 

    //the method 
public Map<Integer, String>findFaildStudent(Map<Integer, String>map1,Map<Integer, String>map2){ 
returns Map<Integer, String>; 
} 

Alors, ma question est de savoir comment trouver le dossier des étudiants ayant échoué. Je l'ai essayé moi-même mais je n'y suis pas parvenu. Toute aide est appréciée.

Ce que j'ai essayé jusqu'à présent

public Map<Integer, String>findFaildStudent(Map<Integer, String>map1,Map<Integer, String>map2){ 
    Integer key = null; 
    String value = null; 

    Iterator<Entry<Integer, String>> iterator = map1.entrySet().iterator(); 
    while(iterator.hasNext()){ 
     Entry<Integer, String> next = iterator.next(); 
     key = next.getKey(); 
    } 

    Iterator<Entry<Integer, String>> iterator2 = map2.entrySet().iterator(); 
    while(iterator2.hasNext()){ 
     Entry<Integer, String> next = iterator2.next(); 
     value=next.getValue(); 
    } 

    Map<Integer,String> hashMap = new HashMap<>(); 
    hashMap.put(key, value); 

    return hashMap; 

} 
+1

rendre la vie simple pour votre auto et créer une classe avec ces champs puis font cependant beaucoup de objets que vous voulez, stocker dans une liste de quelque sorte et requête pour obtenir des résultats. –

+0

"Je l'ai essayé moi-même mais je n'ai pas réussi". Alors * qu'avez-vous essayé? En quoi a-t-il "échoué"? – Blorgbeard

+0

@Blorgbeard J'ai essayé d'itérer la première carte et obtenir la clé, puis itérer la deuxième carte et obtenir la valeur et mettre dans une nouvelle carte et l'a renvoyé de la méthode. –

Répondre

1
public Map<String, String> findFaildStudent(Map<Integer, String>map1,Map<Integer, String>map2){ 
    Map<String, String> failed = new HashMap<>(); 

    for (Map.Entry<Integer, String> k : map2.entrySet()) { 
     if(k.getValue().equals("fail")){ 
      failed.put(map1.get(k.getKey()), map2.get(k.getValue())); 
     } 
    } 
    return failed; 
} 
//returns... ("x","failed"), ("y", "failed"), ("z", "failed") 

Donc, fondamentalement, il vous suffit de parcourir la 2ème carte car il contient l'étudiant a échoué, vous obtenez la clé et utilisez cette touche pour obtenir la valeur de map1. Vous ne pouvez pas concaténer les clés car la clé est unique, donc si vous voulez combiner les deux cartes, il est préférable de créer une autre carte en utilisant map1 (valeur) comme clé et map2 (valeur) comme valeur. J'espère que je comprends votre question, mais si vous voulez seulement map2 d'étudiant raté, essayez ci-dessous.

public Map<Integer, String> findFaildStudent(Map<Integer, String>map1,Map<Integer, String>map2){ 
Map<Integer, String> failed = new HashMap<>(); 

for (Map.Entry<Integer, String> k : map2.entrySet()) { 
    if(k.getValue().equals("fail")){ 
     failed.put(k.getKey(), map1.get(k.getKey())); 
    } 
} 
return failed; 
//returns... (1,"x"), (2, "y"), (3, "z") 
+0

Mais qu'en est-il de la méthode que j'ai, je veux dire que je dois le faire avec cette méthode –

+0

alors retour à votre question est map1 a une relation avec map2? – logger

+0

Donc, vous dites que je ne –

-2
map1.entrySet().stream() 
    .filter(entry -> "fail".equals(map2.get(entry.getKey()))) 
    .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));