有 Java 编程相关的问题?

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

Java HashMap,一键多值,一个映射

问题是。。。。我不想使用多张地图,只使用一张地图

我的目标是获得我在输入中输入的姓名列表。 我已经尝试了100个不同的for循环,但我总是倾向于最终得到整个映射的列表和/或重复键被覆盖

    import java.util.*;

public class Another {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    String name;

    HashMap<String, ToA>wordkey = new HashMap<String, ToA>();

    ToA a = new ToA("Doolin", "Bill", "18580824-1464");
    ToA b = new ToA("Dalton", "Bob", "18701005-2232");
    ToA c = new ToA("James", "Jesse", "18470905-2401");
    ToA d = new ToA("Dalton", "Emmet", "18710713-0818");

    wordkey.put("Doolin", a);
    wordkey.put("Dalton", b);
    wordkey.put("James", c);
    wordkey.put("Dalton", d);

    System.out.println("Efternamn:");
    name = scan.next();
}
}


    public class ToA{
    private String fname, lname, dob;

public ToA(String fname, String lname, String dob){
    this.fname = fname;
    this.lname = lname;
    this.dob = dob;
}
public String getFname(){
    return fname;
}
public String getLname(){
    return lname;
}
public String getDob(){
    return dob;
}
public String toString(){
    return "\nFirstname: " + fname + "\nSurname: " + lname + "\nDateOfBirth: " + dob;
}
}

对于输入道尔顿,我希望输出 名字:比尔 姓:道尔顿 出生日期:18701005-2232

名字:埃米特 姓:道尔顿 出生日期:18710713-0818

我真的被这件事缠住了,所以非常感谢您的帮助,谢谢


共 (2) 个答案

  1. # 1 楼答案

    要将我的评论作为答案发表:使用如下Map<String, List<ToA>>

    Map<String, List<ToA>> wordkey = new HashMap<>();
    
    ToA a = new ToA("Doolin", "Bill", "18580824-1464");
    ToA b = new ToA("Dalton", "Bob", "18701005-2232");
    ToA c = new ToA("James", "Jesse", "18470905-2401");
    ToA d = new ToA("Dalton", "Emmet", "18710713-0818");
    
    wordkey.put("Doolin", Arrays.asList(a));
    wordkey.put("James", Arrays.asList(c));
    wordkey.put("Dalton", Arrays.asList(b, d));
    

    要根据输入打印名称,可以执行以下操作:

    System.out.println("Efternamn:");
    name = scan.next();
    
    List<ToA> toas = wordkey.get(name);
    if (toas != null) {
      System.out.println("ToAs");
      for (ToA toa : toas) {
        System.out.println("ToA: " + toa);
      }
    }
    else {
      System.out.println("No ToAs found for input: " + name);
    }
    
  2. # 2 楼答案

    对于你想要实现的目标,有几种可能性。一个简单的方法是使用GuavasMultimap或ApachesMultiMap

    另一种可能是在类中“包装”映射,并将List<ToA>作为映射的值。您可以根据需要重写putremoveget方法