从java中的key和vlue获取两个不同Map的Map键和值

时间:2017-10-11 19:43:41

标签: java collections hashmap

有两个地图,第一个包含学生ID和姓名。第二个包含学生ID和“通过”或“失败”状态。有一种方法可以获取Map类型的两个参数并返回Map。

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

}

2 个答案:

答案 0 :(得分: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的值。 您无法连接键,因为键是唯一的,因此如果您想将两个映射组合在一起,最好使用map1(value)作为键并使用map2(value)作为值来创建另一个映射。希望我理解你的问题,但如果你只想要失败学生的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")

答案 1 :(得分:-2)

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