将对象转换为字符串后将其存储在hashMap中

时间:2019-10-10 15:33:36

标签: java hashmap

我有一个问题,  如果我们定义hashMap来接收字符串键和字符串值该怎么办,但是由于某种原因,我们需要在将abject转换为字符串后将其存储为值(obj.toString()) 在此示例中,如果我遍历hashMap,并且需要访问它的字段,则我不能访问它,因为它被转换为字符串,我该怎么办?谢谢

HashMap<String, String> hashMapObj = new HashMap<String, String>();

        hashMapObj.put("hil", "aii");
        hashMapObj.put("hil1", "ai1");
        hashMapObj.put("hil2", "ais2");
        hashMapObj.put("hi3", "aisi3");
        hashMapObj.put("hil4", "aii4");

 Employee obj = new Employee(1, "Bill Hill ", 7);
         int[] arr = {1,2,3,4,5,6,6,7,7};

        hashMapObj.put("emp1", obj.toString());
        hashMapObj.put( Integer.toString(1) , obj.toString() );
        hashMapObj.put("arr" , Arrays.toString(arr));
  for(HashMap.Entry< String , String> x : hashMapObj.entrySet()){
            String  key   = x.getKey();
            System.out.println("key ===> "+ key);

            System.out.println("j ===> " + hashMapObj.get("1"));
             Object e = (Object) hashMapObj.get("1");

             System.out.println(e);

        }

2 个答案:

答案 0 :(得分:1)

使用HashMap<String, String>();而不是使用HashMap<String, Object>();,并且不要使用toString()方法转换对象。如果执行了此操作,则使用get总是会得到一个Object。然后可以轻松地将该对象传递给系统println方法。

答案 1 :(得分:0)

  

有什么解决方案?

两种解决方案。

第一个解决方案是首先不要这样做。将对象本身存储为值;即作为Map<String, YourClass>,这是最简单的解决方案,也是计算效率最高的解决方案。

第二个解决方案是实施更多工作:

  1. 确保您定义了YourClass.toString()方法,以便对重构对象所需的所有信息进行编码。这通常包括对象字段的值。字符串表示形式必须明确,并且应易于解析。

  2. 写另一种方法;例如static YourClass fromString(String s) {...},可用于解析toString()的输出,并从中重建对象。

您可以使用JSON作为字符串表示形式,并使用JSON绑定库(例如GSON或Jackson)来进行对象<->字符串转换。


请注意,

YourClass y = (YourClass) map.get("1");

不起作用。您不能将String投射到YourClass。您需要编写一些Java代码才能从YourClass重新创建String实例。