在java中使用多种类型的值进行映射
我必须完成一个奇怪的特殊场景。 其描述如下:
我必须设计一个Map,其中’ Keys ‘总是String类型。 但是,其中一个键的’ Value ‘可能是String或List (取决于特定键可以具有的值的数量。如果该特定键只有一个值,则’Value’将是一个String,并且它必须如果密钥包含许多值,则为List。 如何完成这种情况?
例如:地图中有2个键,即“姓名”和“电话号码”。 一个人只能有一个姓名和多个电话号码。 所以这里的第一个键,即“Name”应该具有Value的’String’类型,而对于第二个键,即“Phone Nos”应该具有Value的’List’类型。 如何申报这样的地图。 可能吗?
可以执行Map
。
但是 :我强烈建议你考虑你的设计。 您应该为您的人使用课程。 这样你可以这样做: Map
with Person
有getter和setter的名字,电话号码和其他信息。
示例Person
类:
public class Person { private String name; private List phoneNumbers = Collections.emptyList(); public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPhoneNumbers(List phoneNumbers) { this.phoneNumbers = phoneNumbers; } public void addPhoneNumber(String number) { phoneNumbers.add(number); } public List getPhoneNumbers() { return phoneNumbers; } }
当然有。 选择你的毒药:
Map mixed = new HashMap(); Map mixed = new HashMap(); @SuppressWarnings("rawtypes") Map mixed = new HashMap();
好吧,为什么不制作Map
? 如果只有一个值或者使用String和List的常用超类型,你总是可以在列表中添加一个元素,这样你就可以得到
Map
我会做以下其中一项:
-
使用
Multimap
。 Multimap将包含与每个键关联的一个或多个值。 -
使用
Map
。 使用Either来区分单个或多个值。>>
为什么不制作一个PhoneNumber包装类来公开一个API,用于存储一个或多个电话号码,然后可以检索一个或所有(多个)电话号码,然后制作一个String和PhoneNumber的映射? 就像是:
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 getPhoneNumbers() { if(phoneNumbers!=null) { return Arrays.asList(phoneNumbers); } else { return null; } }
}
- java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg / hibernate / classic / Session
- 当在方法定义期间用作参数的一部分时,三个点(…)表示什么?
- 我的递归条件是否适合计算二叉树高度?
- Hibernate:如何确保父项的所有子实体都不被删除?
- 如何在JShell中提供javadoc文档?
- 无法使用IEDriver单击IE上的链接
- Java 1.7覆盖hashCode()的行为与我的预期不符
- UnsatisifiedLinkError – 关于如何解决这个问题的任何想法?
- 在swing中登录和注销