首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java HashMap,一个键多个值,一个映射

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

Stack Overflow用户
提问于 2015-11-05 09:06:45
回答 2查看 2.2K关注 0票数 1

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

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

代码语言:javascript
复制
    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;
}
}

为了输入道尔顿,我想要输出的名字:比尔姓氏:道尔顿DateOfBirth: 18701005-2232

姓氏: Dalton : 18710713-0818

我真的被困在这里了,所以任何帮助都是非常感谢的,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-05 09:12:29

要发布我的评论作为回答:使用这样的Map<String, List<ToA>>

代码语言:javascript
复制
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));

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

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2015-11-05 09:13:43

你想要达到的目标有几种可能性。一个简单的方法是使用Guavas 多机或使用Apaches MultiMap

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33540363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档