我需要使用Single Key创建一个HashMap,它应该包含String,ArrayList,String,ArrayList类型的多个值。
ie ..,String类型的Msg,Integer ArrayList类型的groupdestId,类型为String的id,类型为Integer ArrayList的userdestId ..
HashMap<String,String> body = new HashMap<>();
body.put("message",Msg);
body.put("groupdestId",groupdestId);
body.put("id",id);
body.put("destId",userdestId);
答案 0 :(得分: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
}
此外,如果您知道这些数据不会随着时间的推移而改变值,则更好的解决方案是创建immutable class,以便可以在多线程环境中共享它,而无需同步访问它们。
答案 1 :(得分:5)
首先创建一个声明dataType的WrapperClass。
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);
答案 2 :(得分: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
}