【发布时间】:2018-04-20 18:31:32
【问题描述】:
我有一个<Integer, <Set<Element>>> TreeMap,我正在尝试向其中添加键和值,但是我不知道如何向键添加多个值,我查看了其他帖子并在线搜索但找不到我的代码的任何东西。我有一个正在迭代的元素(周期性元素)列表,这些元素包含元素名称、组号、权重等的详细信息,我试图使用组号作为键,然后使用所有其他值(重量、名称等),包括键值。
所以是这样的:
1(key):
1,H,Hydrogen,1(group num),1,1.008
3,Li,Lithium,1,2,6.94
11,Na,Sodium,1,3,22.98976928
2(key):
4,Be,Beryllium,2(group num),2,9.0121831
12,Mg,Magnesium,2,3,24.305
20,Ca,Calcium,2,4,40.078
我正在使用 for 循环遍历列表,然后检查组号是否是映射中的键,如果是,则将元素添加到集合中。如果组号不在地图中,那么我将元素添加到新集合中,然后将该组号和新集合添加到地图中。
我的代码:
public static Map<Integer, Set<Element>> elementsByGroup(List<Element> elements){
Map<Integer, Set<Element>> elementMap = new TreeMap<>();
Set<Element> elementSet = new TreeSet<>(new ElementNumComparator());
for (Element i: elements){
if(elementMap.containsKey(i.group)){
elementSet.add(i);
}
else{
Set<Element> newSet = new TreeSet<>(new ElementNumComparator());
newSet.add(i);
elementMap.put(i.group, newSet);
}
}
打印时会输出这个:
1/[55, Cs, Caesium, 1, 6, 132.905452]
2/[56, Ba, Barium, 2, 6, 137.327]
3/[89, Ac, Actinium, 3, 7, 227.0]
4/[72, Hf, Hafnium, 4, 6, 178.49]
5/[41, Nb, Niobium, 5, 5, 92.90637]
6/[24, Cr, Chromium, 6, 4, 51.9961]
7/[25, Mn, Manganese, 7, 4, 54.938044]
8/[26, Fe, Iron, 8, 4, 55.845]
9/[27, Co, Cobalt, 9, 4, 58.933194]
10/[28, Ni, Nickel, 10, 4, 58.6934]
11/[29, Cu, Copper, 11, 4, 63.546]
12/[48, Cd, Cadmium, 12, 5, 112.414]
13/[13, Al, Aluminium, 13, 3, 26.9815385]
14/[6, C, Carbon, 14, 2, 12.011]
15/[51, Sb, Antimony, 15, 5, 121.76]
16/[8, O, Oxygen, 16, 2, 15.999]
17/[85, At, Astatine, 17, 6, 210.0]
18/[18, Ar, Argon, 18, 3, 39.948]
但是,当应该有多个元素时,它只打印每个组的一个元素。我尝试在 if 语句中添加元素和组,但它只是将每个元素添加到每个键。对此我将不胜感激。
【问题讨论】: