2017-10-11 65 views
-1

键和vlue有两个地图,第一个包含了学生证和名称。第二个包含学生证和“通过”或“失败”状态。有一种方法需要两个Map类型的参数并返回Map。获取地图键和值从两个不同的地图在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");` 

//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>; 
} 

所以,我的问题是如何找到失败的学生记录。我自己尝试过,但没有成功。任何帮助表示赞赏。

我试了一下,到目前为止

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

让生活简单的为你的自我,创造一类具有这些领域,然后让你想然而,许多对象,将其存储到某种形式的名单和查询,对结果。 –

+0

“我自己尝试过,但没有成功”。所以*你尝试了什么?它以什么方式“不成功”? – Blorgbeard

+0

@Blorgbeard我试图重复第一张地图,并得到那么关键迭代第二地图和获得的价值,并投入了新的地图,并从该方法返回它。 –

回答

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") 

所以基本上你只需要通过第二地图迭代,因为它含有不合格的学生,那么你得到的密钥,并使用该密钥来获得map1的值。 不能concate键因为如此,如果你想一起结合两种地图这是更好地创造价值作为使用MAP1(值)键和MAP2(值),另一张图的关键是独一无二的。希望我理解你的问题,但如果你只想要失败的学生map2然后尝试下面。

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

但是,我们的方法,我有我的意思是我有这种方式来做到这一点 –

+0

所以回到你的问题所以你说是MAP1有任何关系MAP2 – logger

+0

是我不? “T不得不遍历第一个地图? –

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