Хранение объекта в hashMap после преобразования его в строку - PullRequest
0 голосов
/ 10 октября 2019

У меня есть вопрос, что если мы определим hashMap для получения строкового ключа и строкового значения, но по какой-то причине нам нужно сохранить объект в виде значения после преобразования его в строку (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 ]

1 голос
/ 10 октября 2019

Вместо использования HashMap<String, String>(); используйте HashMap<String, Object>(); и не конвертируйте ваши объекты с помощью метода toString (). Если вы сделали это, вы всегда получите объект, если вы используете get. Затем объект можно легко передать в системный метод println.

0 голосов
/ 10 октября 2019

Какое решение для этого?

Два решения.

Первое решение состоит в том, чтобы не делать это в первую очередь. Храните сами объекты как значения;то есть как Map<String, YourClass> Это самое простое и наиболее эффективное в вычислительном отношении решение.

Второе решение - это дополнительная работа для реализации:

  1. Убедитесь, что вашеопределите метод YourClass.toString(), чтобы он кодировал всю информацию, необходимую для восстановления объекта. Обычно это включает в себя значения полей объекта. Строковое представление должно быть однозначным и легко анализируемым.

  2. Напишите другой метод;Например, static YourClass fromString(String s) {...}, который можно использовать для анализа вывода toString() и восстановления объекта из него.

Вы можете использовать JSON в качестве строкового представления и библиотеку привязки JSON, напримеркак GSON или Джексон, чтобы сделать объект <-> строковые преобразования.


Обратите внимание, что это:

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

не будет работать. Вы не можете разыграть String до YourClass. Вам нужно написать некоторый Java-код для воссоздания YourClass экземпляра из String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...