Java HashMap,一键多值,一张map
Java HashMap, One key multiple Values, One map
如问题所示....我不想使用多张地图,只使用一张地图。
我的目标是获取我在输入中输入的名称的列表。
我已经尝试了一百种不同的 for 循环,但我总是倾向于以整个地图的列表结束 and/or 重复键被覆盖。
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
我真的受困于此,非常感谢任何帮助,谢谢
将我的评论 post 作为答案:使用 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);
}
您要实现的目标有多种可能性。一个简单的方法是使用 Guavas Multimap or to use Apaches MultiMap.
另一种可能性是 "wrap" 地图在 class 中,并保留 List<ToA>
作为地图的价值。您可以根据需要覆盖 put
、remove
和 get
方法
如问题所示....我不想使用多张地图,只使用一张地图。
我的目标是获取我在输入中输入的名称的列表。 我已经尝试了一百种不同的 for 循环,但我总是倾向于以整个地图的列表结束 and/or 重复键被覆盖。
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
我真的受困于此,非常感谢任何帮助,谢谢
将我的评论 post 作为答案:使用 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);
}
您要实现的目标有多种可能性。一个简单的方法是使用 Guavas Multimap or to use Apaches MultiMap.
另一种可能性是 "wrap" 地图在 class 中,并保留 List<ToA>
作为地图的价值。您可以根据需要覆盖 put
、remove
和 get
方法