将Java中不同类型的HashMap组合到通用HashMap
我的问题从Java中HashMap的一个限制开始,它不允许对同一个键使用多个值。正如在下面编写的代码中一样,我需要为k5和k6设置多个值 map是QueryParameters的主hashmap,我将把它传递给RestAPI请求中使用。 尝试的方法: 创建了字符串和字符串[]类型的不同映射,然后合并,我发现该映射不允许合并。相同的代码已标记为已通过注释// 我的REST请求如下所示,我发现很难通过以下方式发送: https://myURL/api&k1[]=value&k2=2value&k5[]=v3&k5[]=v4&k5[]=v5&k6[]=v7&k6[]=v8&k6[]=v8 如果有任何其他方式来表示在Java中,请让我知道将Java中不同类型的HashMap组合到通用HashMap,java,hashmap,Java,Hashmap,我的问题从Java中HashMap的一个限制开始,它不允许对同一个键使用多个值。正如在下面编写的代码中一样,我需要为k5和k6设置多个值 map是QueryParameters的主hashmap,我将把它传递给RestAPI请求中使用。 尝试的方法: 创建了字符串和字符串[]类型的不同映射,然后合并,我发现该映射不允许合并。相同的代码已标记为已通过注释// 我的REST请求如下所示,我发现很难通过以下方式发送: https://myURL/api&k1[]=value&k2=2value&k5[
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");
其实很简单。以下是您需要执行的操作:
Map<String, String[]> map = new HashMap<>();
map.put("v3", new String[] { "v", "foo", "bar" });
如果要向其中添加更多元素,可以将贴图定义为map
您需要此地图:
Map<String, List<String>> strings = new HashMap<>();
这将动态创建和删除地图中的列表。例如:
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
您可以使用地图或列表:List@icantcodemap.putk5,Arrays.asListv3,'v4,v5@icantcode ARRAYST.asListvalue,或者根据您的版本,您可以使用List.OF。您可以有一个映射,但添加到其中的将是Map.putv3,新字符串[]{v,foo,bar};但是map.putk1,value;?它不是String[]类型。用一个元素构造一个数组啊好的,有没有比这更好的方法在Java中实现这一点,然后放置每个键,因为它们大约是8,我不认为创建一个包含所有8个键的数组是最优的?我已经编辑了答案,将映射的值作为列表包含在内。这样做会容易得多。
// 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