有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java中使用HashMaps将名称与组织中的成员身份进行匹配?

这就是我的困境。我不知道从哪里开始。假设我得到了一份属于多个组织的人员列表,如下所示:

John NAACP PETA NRA
Bill NRA WHO
Nancy NAACP NRA WHO
Jim PETA WHO

但我想在另一个文件中列出所有可能的组织,然后输出这样的内容(组织按字母顺序排列,成员也按字母顺序排列,如果没有人在其中,则组织旁边没有名字):

NAACP John Nancy
NRA Bill John Nancy
PETA Jim John
WHO Bill Jim Nancy
YEO

我是HashMaps新手,我不知道该怎么做,所以我很感激能得到的所有帮助


共 (3) 个答案

  1. # 1 楼答案

    这不是最优雅的解决方案,但它会奏效

    要将人员添加到列表中,可以使用以下代码:

    Map<String, List<String>> storage = new 
    LinkedHashMap<String,List<String>>();
    if(!storage.containsKey("NRA")){
       storage.put("NRA", new ArrayList<String>());
    }
    
    storage.get("NRA").add("Bill");
    storage.get("NRA").add("John Nancy");
    

    要提取和打印人员,可以使用以下代码:

    for(Entry<String, List<String>> entry : storage.entrySet()){
        String line = entry.getKey(); //getting company name
    
        for(String name : entry.getValue()){  //extracting name from an array
             line += " ";
             line += name;
        }
    
        System.out.println(line);  //printing the result
    }
    

    我没有在IDE中检查这段代码,但除了可能的打字错误,它会工作

  2. # 2 楼答案

    为每个组织创建一个HashMap,例如HashMap<String,Boolean> memberOfNAACP = new HashMap<String,Boolean>();。当你在成员之间循环,找到一个NAACP成员时,运行memberOfNAACP.put("John",true)。完成后,用memberOfNAACP.keySet()转储散列的内容。如果您事先不知道所有的组织,请使用ArrayListHashMap,键入ArrayList<HashMap<String,Boolean>>

  3. # 3 楼答案

    试试像HashMap<String, ArrayList<String>>这样的东西。将每个组织名称作为带空ArrayList<String>的字符串键插入。然后循环查看人员列表=>;组织,逐个查找组织,并在该组织的ArrayList中插入此人的姓名