[英]Java Map<String,Map<String,Integer> use to populate results
[英]Populate Map<String, Map<String, Integer>> with values
我需要用值填充Map<String, Map<String, Integer>>
。 我的代码如下:
// tags, <types, prices>
Map<String, Map<String, String>> outter = new HashMap<>();
List<String> tags = new ArrayList<String>();
tags.add("1tag");
tags.add("2tag");
List<String> types = new ArrayList<String>();
types.add("paper");
types.add("metal");
List<String> prices = new ArrayList<String>();
prices.add("1.20");
prices.add("2.20");
for (int t = 0; t < tags.size(); t++) {
Map<String, String> inner = new HashMap<>();
for (int tp = 0; tp < types.size(); tp++) {
for (int p = 0; p < prices.size(); p++) {
inner.put(types.get(tp), prices.get(p));
}
}
outter.put(tags.get(t), inner);
}
System.out.println("filled outter:" + outter);
结果是:
filled outter:{2tag={paper=2.20, metal=2.20}, 1tag={paper=2.20, metal=2.20}}
我想要的正确结果是:
filled outter:{2tag={paper=1.20, paper=2.20, metal=1.20, metal=2.20}, 1tag={paper=1.20, paper=2.20, metal=1.20, metal=2.20}}
如何防止覆盖值并获得正确的结果? 帮助..
正如其他人所报告的那样,Java 的 Map 接口将每个键映射到单个值。 如果您想为单个键分配多个值,您可以手动执行此操作(映射到列表)。 或者使用已经拥有它的库,例如Guava 的 Multimap用于您的内部 map。
这样你就会有类似的东西:
filled outter:{2tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}, 1tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}}
您将 map 定义为:
Map<String, Multimap<String, String>> outter = new HashMap<>();
您有一个 Multimap here的示例用法。
因为您不能在 Map 中设置两个具有相同名称的键。 您应该在外部 Map 内创建一个 ArrayList 或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.