Hashmap - 单个键,多个值 - 如何检索?

时间:2012-10-08 15:15:09

标签: java xml hashmap multivalue

我正在调用一个服务,我得到了以下格式的XML响应。

如何从此响应中的单个键下检索多个值? 我想将所有值存储在List<String>

<p700:item xmlns:p700="http://abc.test.com">
    <p700:key xsi:type="xsd:string">Key1</p700:key>
    <p700:value xsi:type="xsd:string">Value1</p700:value>
    <p700:value xsi:type="xsd:string">Value2</p700:value>
    <p700:value xsi:type="xsd:string">Value3</p700:value>
    <p700:value xsi:type="xsd:string">Value14</p700:value>
</p700:item>
<p700:item xmlns:p700="http://abc.test.com">
    <p700:key xsi:type="xsd:string">Key1</p700:key>
    <p700:value xsi:type="xsd:string">Value1</p700:value>
    <p700:value xsi:type="xsd:string">Value2</p700:value>
</p700:item>

3 个答案:

答案 0 :(得分:1)

制作地图String&lt; - &gt; List<String>

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

使用此代码添加值:

List<String> values = map.get( key );
if( null == values ) {
    values = new ArrayList<String>();
    map.put( key, values );
}

values.add( "xxx" );

答案 1 :(得分:0)

如果您不想在问题的评论中提及Map<String, List<String>>,您可以迭代地图并将其手动添加到列表中。

List<String> theList = new ArrayList<String>();
String theKey = "The Key";
for(Map.Entry<String, String> entry : map.entrySet()) {
    if(entry.getKey().equals(theKey)) {
        theList.add(entry.getValue());
    }
}

这当然假设您已经将数据从XLS提取到Map<String, String>。如果你还没有,那完全是另一回事。

如果您需要一个包来摄取您的XLS,请考虑JXLS

答案 2 :(得分:0)

Guava有一个Multimap接口和一个ListMultimap实现,它是列表结构中包含的多个值的键映射(而不是集合或有序集合)。它基本上是Map<K, Collection<V>>。您还可以找到示例here。至于实际解析XML,在SO上有很多关于它的问题,你可以从this one开始。