2017-07-27 113 views
2

我需要创建一个单个密钥一个HashMap,它应该保持String类型,ArrayList中,字符串,ArrayList中的多个值..如何在HashMap中保存类型的多个值?

即..,String类型的消息,类型groupdestId整数ArrayList中,类型ID字符串类型的userdestId整数的ArrayList ..

HashMap<String,String> body = new HashMap<>(); 
body.put("message",Msg); 
body.put("groupdestId",groupdestId); 
body.put("id",id); 
body.put("destId",userdestId); 
+1

你应该创建一个类使用这些值作为替代领域。 – marstran

+3

这4个值是否有任何关系?如果它们属于一起并描述一个对象,则根本不应该使用映射,而应该有一个包含这4个值的自定义类。 –

+0

您是否将数据发送到API?你能告诉我们为什么你真的在做?可能会有更好的解决方案,比如@OHGODSPIDERS提出的解决方案。 – Sufian

回答

5

简单地定义为Map

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

一个Map<String, Object>可以容纳任何类型的值,因此也:

  • String
  • ArrayList<Integer>

这个解决方案给你,如果你不知道什么值(类型和名称),你需要存储的最大的灵活性。


如果您确切知道需要处理更好解决方案的数据是定义一个具有名为Map的键的属性的自定义类。

public class DataHolder { 
    private String message; 
    private List<Integer> groupdestId; 
    private String id; 
    private List<Integer> userdestId; 

    // Add getters and setters 
} 

此外,如果你知道这些数据不随时间变化值的更好的解决方案是不syncronize访问他们创造一个immutable class,因此它可以在多线程环境中共享。

+1

为什么这得到了一个downvote,它正确的一切都继承了'Object' – XtremeBaumer

+0

感谢您的快速回复:) –

+0

@AjayJayendran你很好。 –

3

如果您正在寻找存储多种类型的

HashMap<String,Object> body = new HashMap<>();' 

一般混合气馁类型,并确保在获取到的值,你需要正确地检查。否则,你最终会出现类转换异常。


此外,你需要一个对象,而不是地图,因为我可以看到所有的键都是相关的。只需创建一个类并使用该类来存储这些属性。

public class Body { 

private String message;  
private int groupdestId; 
private int id; 
private List<String> vals; 

// other attributes and getters/setters 


} 
+1

伟大的答案,解释了为什么建立无类型地图是不鼓励的。 – marstran

4

首先制作一个WrapperClass,声明dataType。

Class StringAndListWrapper{ 
    String stringValue; 
    List<String> stringListValue; 
    public StringAndListWrapper(){ 
     stringValue = new String(); 
     stringListValue = new ArrayList<>(); 
    } 
} 

然后你就可以把包装的HashMap中,

String Key = "your key"; 
HashMap<String, StringAndListWrapper> hmap = new HashMap<>(); 
StringAndListWrapper stringAndListWrapper = new StringAndListWrapper(); 
stringAndListWrapper.stringValue = "putYourStringValue"; 
stringAndListWrapper.stringListValue.add("add Elements Here"); 
hmap.put(key, stringAndListWrapper); 
相关问题