Jsoup,hashMap数据键值

时间:2019-01-23 11:21:30

标签: java

我有一个hashMap类型的变量来发送数据,并且我有几个重复的Key,而hashMap仅发送一个,如何发送我动态获得的几个相同的密钥?

Code:
Map<String,String> postData = new HashMap<>();
postData.put("K1",  "AAAAA");
postData.put("K1",  "BBBBB");
postData.put("K1",  "CCCCC");
postData.put("K2",  "AAAAA");
postData.put("K3",  "AAAAA");


jsoup.connect
........
.data(postData)
....

仅发送“ K1”,“ CCCCC”

4 个答案:

答案 0 :(得分:0)

HashMap在设计上仅允许同一键使用一个值,并且在您重新设置相同键时将覆盖该值。您正在寻找的是MultiValueMap。检查以下线程:How do I add and remove items from a multivalue HashMap?

答案 1 :(得分:0)

在此处发布问题之前,请了解HashMap的工作原理。 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

HashMap存储一个键值对。 因此,如果再次输入密钥,它将仅更新值。

如果您这样做:

postData.put("K1",  "AAAAA");
postData.put("K1",  "BBBBB");
postData.put("K1",  "CCCCC");
postData.put("K2",  "AAAAA");
postData.put("K3",  "AAAAA");

您最终得到:

"K1" =>  "CCCCC"
"K2" =>  "AAAAA"
"K3" =>  "AAAAA"

答案 2 :(得分:0)

地图的本质是您的键是唯一的。相同键没有多个值。

换句话说:例如,您要么必须发送多次,要么必须具有Map<String, List<String>>。换句话说:“平面”映射不适用于处理同一键具有多个值的情况!

鉴于OP中的评论, other 解决方案可能是使用List<Pair<String, String>>。含义:似乎您主要是想以某种方式传输映射“ A-> B”。然后,您将无法使用地图,而应该使用包含此类映射的列表!

答案 3 :(得分:0)

Java Collections中的HashMap不允许重复,但是您可以使用Apache的Common Collection'MultiMap'

  

代码:

MultiMap<String, String> postData= new MultiValueMap<>();
postData.put("K1",  "AAAAA");
postData.put("K1",  "BBBBB");
postData.put("K1",  "CCCCC");
postData.put("K2",  "AAAAA");
postData.put("K3",  "AAAAA");


jsoup.connect
........
.data(postData)
....

要使用apache公共集合,请在pom.xml中添加以下依赖项或下载其jar:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-collections4</artifactId>
  <version>4.1</version>
</dependency>

进一步阅读:https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/map/MultiValueMap.html