Объединение различных типов HashMap в Java с универсальным HashMap - PullRequest
0 голосов
/ 11 мая 2019

Мои проблемы начинаются здесь с ограничения в HashMap в Java, которое не позволяет использовать несколько значений для одного и того же ключа. Как и в моем коде, написанном ниже, мне нужно иметь несколько значений для k5 & k6.

map - это основная хеш-карта QueryParameters, которую я передам для использования в моем запросе RestAPI. Подход пробовал: Создан другой тип карты типа String и String [], а затем слияние, которое, как я обнаружил, не будет разрешено для слияния. Код того же самого был отмечен как закомментированный через //

Мой запрос REST выглядит следующим образом, и мне трудно отправить его следующим образом:

https://myURL/api&k1[]=value&k2=2value&k5[]=v3&k5[]=v4&k5[]=v5&k6[]=v7&k6[]=v8&k6[]=v8

Если есть другой способ представить это на Java, пожалуйста, дайте мне знать.

Map<String, String> map = new HashMap<>();
map.put("k1", "value");
map.put("k2", "2value");
//String[] k5 = new String[]{"v3", "v4", "v5"};
map.put("k5[]", "v3");
map.put("k5[]", "v4");
map.put("k5[]", "v5");
//String[] k6= new String[]{"v7", "v8", "v9"};
map.put("k6[]", "v7");
map.put("k6[]", "v8");
map.put("k6[]", "v9");

Ответы [ 2 ]

4 голосов
/ 11 мая 2019

Это довольно просто на самом деле. Вот что вам нужно сделать:

Map<String, String[]> map = new HashMap<>();
map.put("v3", new String[] { "v", "foo", "bar" });   

Если вы хотите добавить больше элементов к этому, вы можете определить карту как Map<String, List<String>>

Map<String, List<String>> map = new HashMap<>();
List<String> initialList = new ArrayList<>();
initialList.add("v");
initialList.add("foo");
initialList.add("bar");
map.put("v3", initialList);

// add some new String      
map.get("v3").add("Some_new_string");

// adding a whole new list
map.get("v3").addAll(Arrays.asList("new_element_1", "new_element_2"));
3 голосов
/ 11 мая 2019

Вы хотите эту карту:

Map<String, List<String>> strings = new HashMap<>();

Для добавления и удаления строк используйте computeIfAbsent и computeIfPresent:

// Add str to list of strings indexed by key
strings.computeIfAbsent(key, ign -> new ArrayList<>()).add(str);

// Remove str from list of strings indexed by key
strings.computeIfPresent(key, (i, c) -> c.remove(str) && c.isEmpty() ? null : c);

Это динамически создает и удаляет списки на карте.Пример:

Map<String, List<String>> strings = new HashMap<>();
put(strings, "key", "a"); // ["key" => ["a"]] <-- list dynamically created
put(strings, "key", "b"); // ["key" => ["a", "b"]]
remove(strings, "key", "b"); // ["key" => ["a"]]
remove(strings, "key", "a"); // [] <-- no leftovers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...