如何在HashMap中保存多个类型的值?

时间:2017-07-27 09:17:55

标签: java arraylist hashmap

我需要使用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);

3 个答案:

答案 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


}