用值填充地图<字符串、地图<字符串、整数>>



我需要用值填充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接口将每个键映射到单个值。如果您想为单个键分配多个值,您可以手动执行(映射到List)。或者使用已有的库,比如Guava的Multimap作为内部映射。

这样你就会得到这样的内容:

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的例子。

因为您不能在Map中设置两个具有相同名称的键。你应该在外部Map中创建一个ArrayList或类似的东西。

最新更新