Java 填充地图<;字符串,Map<;字符串,整数>&燃气轮机;有价值
我需要用值填充Java 填充地图<;字符串,Map<;字符串,整数>&燃气轮机;有价值,java,loops,dictionary,Java,Loops,Dictionary,我需要用值填充Map。我的代码如下: // tags, <types, prices> Map<String, Map<String, String>> outter = new HashMap<>(); List<String> tags = new ArrayList<String>(); tags.add("1tag"); tags.add("2tag"); List<
Map
。我的代码如下:
// 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=1.20, paper=2.20, metal=1.20, metal=2.20}, 1tag={paper=1.20, paper=2.20, metal=1.20, metal=2.20}}
如何防止重写值并获得正确的结果?
帮助..因为不能在一个同名的地图中设置两个键。您应该在外部映射中创建一个ArrayList或类似的东西。正如其他人所报告的那样,Java的映射接口将每个键映射到单个值。如果要为单个键指定多个值,可以手动执行(映射到列表)。或者使用已有的库,比如你的内部地图 这样,您将获得类似于:
filled outter:{2tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}, 1tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}}
您可以将地图定义为:
mapoutter=newhashmap();
您有一个使用Multimap的示例。使用maps时不允许使用重复键。除了保留一堆地图,您应该使用对象(如
MyItem
)来保存所有相关信息。然后,可以使用集合或键控贴图存储这些对象,以供以后参考
filled outter:{2tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}, 1tag={paper=[1.20, 2.20], metal=[1.20, 2.20]}}