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

Aja*_*ran 2 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);
Run Code Online (Sandbox Code Playgroud)

Dav*_*INO 5

只需定义Map

Map<String, Object> body = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

A 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
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您知道这些数据不会随时间更改值,则更好的解决方案是创建不可变类,以便可以在多线程环境中共享它,而无需同步访问它们.

  • 答案将解决问题(因此投票不是我的),但它颠覆了类型系统并使得难以处理这些值,因为你必须测试它们以找出它是什么类型. (5认同)
  • 我认为答案应该引导那些要求正确__solution__的人.只是盲目地回答这个问题,好像这是最好的做法,并不好. (2认同)
  • @DavideLorenzoMARINO我们不知道总共有4个相同类型和名称的值,或者它是一个完全可变的属性列表.在我看来,要求澄清要求本来是更好的解决方案,而不是玩[最快的枪](https://meta.stackexchange.com/questions/9731/fastest-gun-in-the-west-problem). (2认同)

Alo*_*hra 5

首先创建一个声明dataType的WrapperClass.

Class StringAndListWrapper{
    String stringValue;
    List<String> stringListValue;
    public StringAndListWrapper(){
       stringValue = new String();
       stringListValue = new ArrayList<>();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以把包装器放在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);
Run Code Online (Sandbox Code Playgroud)