2017-10-11 98 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()));