Добавление массивов в Hashmap <String, Object>? - PullRequest
0 голосов
/ 17 января 2019

У меня есть Hashmap, который принимает строки и объекты, я хочу добавить String [] и Object [] в hashmap, и он не добавляет их в качестве объектов.

Я отсутствовал в мире Java в течение 11 лет, поэтому извиняюсь, если это разбивает квадратный колышек в круглое отверстие, я просто ожидаю, что при передаче объекта в виде массивов он будет работать.

Я добавлю, что один и тот же код (очевидно, немного другой) работает в C #, передавая массивы в словарь строк и объектов, следовательно, ожидается, что он будет аналогичным в Java.

Я пытался объявить массивы вне команды put, и это все, что я прошел тестирование.

Map<String, Object> params = new HashMap<>();
params.put("sl", new String[]{"AZN"});
params.put("dType", "trade");
// year - the year minus 1900
// month - 0 to 11
params.put("startDate", new Date(2018-1900, 11, 20));
params.put("endDate", new Date(2018-1900, 11, 20));
params.put("tZ", "Eur");
params.put("ac", "equity");
params.put("af", new Object[]{"=", "price", 6031} );

Я ожидаю, что у params будет строковый массив с именем sl и массив объектов af с 3 сущностями ... sl и af в настоящее время пустые

когда я говорю пусто, я вижу:

params[0] sl >
params[1] dType > trade
params[2] startDate > 2018-11-20
params[3] endDate > 2018-11-20
params[4] tZ > Eur
params[5] ac > equity
params[6] af >

Как видно выше, это вывод, который я вижу.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ваши массивы успешно добавляются на карту. Я не уверен, как ты находишь это пустым. Когда я пытаюсь сделать это ниже, я вижу, как распечатывается значение:

params.forEach((k, v)->{
      System.out.println("key: " + k + "\tvalue: " + v);
    });

Выход:

key: ac value: equity
key: endDate    value: Thu Dec 20 00:00:00 IST 2018
key: af value: [Ljava.lang.Object;@119d7047 // Class name + hashcode of the object being printed
key: tZ value: Eur
key: dType  value: trade
key: sl value: [Ljava.lang.String;@776ec8df // Class name + hashcode of the object being printed
key: startDate  value: Thu Dec 20 00:00:00 IST 2018

Попробуйте ниже, если вы хотите напечатать значения массива:

params.forEach((k, v)->{
      if(v.getClass().isArray()) {
        v = Arrays.toString((Object[])v);
      }
      System.out.println("key: " + k + "\tvalue: " + v);
    });
0 голосов
/ 17 января 2019

Нет проблем с кодом. Но поскольку карта параметров хранит объект как значение, вам может потребоваться приводить значение обратно к его типу каждый раз, когда вы получаете его с карты (каждый ключ хранит значение, тип которого отличается.).

        Map<String, Object> params = new HashMap<>();
        params.put("sl", new String[]{"AZN"});
        params.put("dType", "trade");
// year - the year minus 1900
// month - 0 to 11
        params.put("startDate", new Date(2018-1900, 11, 20));
        params.put("endDate", new Date(2018-1900, 11, 20));
        params.put("tZ", "Eur");
        params.put("ac", "equity");
        params.put("af", new Object[]{"=", "price", 6031} );

        for(Object obj:(Object[]) params.get("af")) {
            System.out.println(obj);
        }

        for(String obj:(String[]) params.get("sl")) {
            System.out.println(obj);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...