Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中HashMap中HashMap的值_Java_Object_Hashmap - Fatal编程技术网

Java中HashMap中HashMap的值

Java中HashMap中HashMap的值,java,object,hashmap,Java,Object,Hashmap,我有一个学生的hashmap,其中存储了id、姓名和姓氏。 所以我创造了这个: Map<Interger, HashMap<String,String>> students = new HashMap<>(); 其中第二个hashmap存储名称和lastname。 我的目标是在swing应用程序中寻找一名学生,我成功地使用id进行搜索,因为它是第一个hashmap的关键,但我希望像这样使用它们: 因此,我的问题是:如果我想按姓名或姓氏搜索,如何获取第一个ha

我有一个学生的hashmap,其中存储了id、姓名和姓氏。 所以我创造了这个:

Map<Interger, HashMap<String,String>> students = new HashMap<>();
其中第二个hashmap存储名称和lastname。 我的目标是在swing应用程序中寻找一名学生,我成功地使用id进行搜索,因为它是第一个hashmap的关键,但我希望像这样使用它们:


因此,我的问题是:如果我想按姓名或姓氏搜索,如何获取第一个hashmap的值并将其放入新的hashmap?

您可以像这样在hashmap上迭代:

private int searchByName(String s) {
    for(Map.Entry<Integer, HashMap<String, String>> entry : students.entrySet()) {
        HashMap student = entry.getValue(); // Hashmap containing first and lastname
        if (student.containsKey(s)) // If name match
            return entry.getKey(); // Return the student ID
    }
    return 0; // Student not found
}

对于lastname,只需使用containsValues而不是containsKeys

您可以使用Google Collections API Guava专门用于

bimap或双向映射是保留 其值及其键的唯一性。这个约束 使bimap支持反向视图,这是另一个bimap 包含与此bimap相同的条目,但具有相反的键和 价值观


有了这个,你就可以用名字和姓氏进行搜索了。此BiMap将是您的第一个父hashmap的值。

我不确定数据结构是否最适合您的用例,但回答您的问题,您应该尝试使用values方法,该方法将返回映射的值集合


您可以维护3个hashmaps id作为键,name作为键等等,但是很有可能发生姓/名冲突,所以我会迭代name和last name。此外,你真的应该使用学生对象。为什么你要让自己的任务更复杂?Java是一种面向对象语言。定义类并使用它们。使用映射,而不是将学生的字段存储在HashMap中。我想我将创建一个学生类并从中开始,因为这看起来非常简单,谢谢@jbnitet:D
Collection res =  studensts.values();

Iterator<HashMap<String, String>> i = res.iterator();
Map<String,String> resM = null;
while(i.hasNext()){
   resM = i.next();
}