java中具有多种值类型的映射

java中具有多种值类型的映射,java,types,map,key,Java,Types,Map,Key,我必须完成一个奇怪的场景。其内容如下: 我必须设计一个地图,其中“键”总是字符串类型。但是,其中一个键的“值””可以是一个字符串或一个列表(取决于某个键可以具有的值的数量。如果该键只有一个值,则“值”将是一个字符串;如果该键包含多个值,则必须是一个列表)。如何实现这个场景 例如:地图上有两个键,即“姓名”和“电话号码”。一个人只能有一个姓名和多个电话号码。因此,这里第一个键即“Name”的值应为“String”类型,而第二个键即“Phone Nos”的值应为“List”类型。如何声明这样的地图。

我必须完成一个奇怪的场景。其内容如下:

我必须设计一个地图,其中“”总是字符串类型。但是,其中一个键的“值””可以是一个字符串或一个列表(取决于某个键可以具有的值的数量。如果该键只有一个值,则“值”将是一个字符串;如果该键包含多个值,则必须是一个列表)。如何实现这个场景


例如:地图上有两个键,即“姓名”和“电话号码”。一个人只能有一个姓名和多个电话号码。因此,这里第一个键即“Name”的值应为“String”类型,而第二个键即“Phone Nos”的值应为“List”类型。如何声明这样的地图。有可能吗?

有可能执行类似于
映射的操作

但是:我强烈建议您仔细考虑一下您的设计。你应该为你的人使用一个类。这样你就可以做到:
Map
Person
有名字、电话号码和其他信息的getter和setter

示例
Person
class:

public class Person {

    private String name;
    private List<String> phoneNumbers = Collections.emptyList();

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setPhoneNumbers(List<String> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }

    public void addPhoneNumber(String number) {
        phoneNumbers.add(number);
    }

    public List<String> getPhoneNumbers() {
        return phoneNumbers;
    }
}
公共类人物{
私有字符串名称;
私有列表phoneNumbers=Collections.emptyList();
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
公用无效设置电话号码(列出电话号码){
this.phoneNumbers=电话号码;
}
公共无效addPhoneNumber(字符串编号){
电话号码。添加(号码);
}
公共列表GetPhoneNumber(){
返回电话号码;
}
}

为什么不创建一个PhoneNumber包装类,该类公开一个API,用于对一个或多个电话号码进行排序,然后可以检索一个或所有(多个)电话号码,然后生成字符串和电话号码的映射?比如:

class PhoneNumber {


  private String[] phoneNumbers;


  public void storePhoneNumber(String... phoneNumbers) {
     this.phoneNumbers = phoneNumbers;
  }

  public String getPhoneNumber() {
    if(phoneNumbers.length>=1) {
      return phoneNumbers[0];
    } else {
      return null;
    }

  }

  public List<String> getPhoneNumbers() {
    if(phoneNumbers!=null) {
      return Arrays.asList(phoneNumbers);
    } else {
      return null;
    }

  }
类电话号码{
私有字符串[]电话号码;
public void storePhoneNumber(字符串…PhoneNumber){
this.phoneNumbers=电话号码;
}
公共字符串getPhoneNumber(){
如果(PhoneNumber.length>=1){
返回电话号码[0];
}否则{
返回null;
}
}
公共列表GetPhoneNumber(){
if(电话号码!=null){
返回数组.asList(电话号码);
}否则{
返回null;
}
}

}当然有。选择你的毒药:

Map<String, Object> mixed = new HashMap<String, Object>();

Map<String, Serializable> mixed = new HashMap<String, Serializable>();

@SuppressWarnings("rawtypes")
Map mixed = new HashMap();
Map mixed=newhashmap();
Map mixed=新的HashMap();
@抑制警告(“原始类型”)
Map mixed=新的HashMap();

那么,为什么不制作一张地图呢?如果列表中只有一个值,则始终可以只向列表中添加一个元素,或者使用字符串和列表的公共超类型,这样就可以得到

Map<String, Object>
Map

我将执行以下操作之一:

  • 使用
    多重映射
    。将包含与每个键关联的一个或多个值

  • 使用
    地图
    。使用可区分单个值或多个值


  • 用户要求提供一种使用这种结构的方法:
    “Name”->“Sam Something”,“Phone Nos”->“1234”,“5678”
    ,这仍然不适用于您的示例。番石榴的
    ListMultimap
    Map
    更适合使用。技术人员:为什么它不起作用?对象可以是任何可以用java表示的东西,或者我在这里遗漏了什么吗?和作业一样:???你能解释一下那里发生了什么吗?