我有两张不同大小的地图。例如
Map<String, Double> qm3 = new HashMap<>();
Map<String, Double> m = new HashMap<>();
qm3具有以下地图{d=0.2, e=0.3}
m有以下地图{e=0.3, c=0.4, d=0.5}
现在,我想比较这两张地图的按键。如果“qm3”的第一个键与“m”的任何键匹配,那么我想将qm3的值存储在列表 qvec 中,并将m的值存储在另一个列表中 dvec 即可。等等
我想将qm3(d,e)的每个键与m(e,c,d)的每个键匹配。 例如,d将与e,c,d进行比较。 如果找到匹配,那么我将把d的值放在两个列表中。
qvec将存储来自qm3的d的值 和dvec将存储m的值
到目前为止我的代码。
for(Map.Entry<String, Double> qe : qm3.entrySet()){
for(Map.Entry<String, Double> de : m3.entrySet()){
System.out.println(qe.getKey());
if(qe.getKey().equals(de.getKey())){
//System.out.println(qe.getKey());
qvec.add(qe.getValue());
dvec.add(de.getValue());
}
else {
qvec.add(qe.getValue());
dvec.add(0.0);
}
}
}
答案 0 :(得分:0)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class NewClass2 {
public static void main(String[] args) {
Map<String, Double> qm3 = new HashMap<>();
qm3.put("d", 0.2);
qm3.put("e", 0.3);
qm3.put("a", 0.8);
Map<String, Double> m = new HashMap<>();
m.put("e", 0.3);
m.put("c", 0.4);
m.put("d", 0.5);
List<Double> qvec = new ArrayList<>();
List<Double> dvec = new ArrayList<>();
for(String key_from_qm3 : qm3.keySet()){ //for each key from qm3
if(m.keySet().contains(key_from_qm3)){ //check if it exists in the keyset of m
qvec.add(qm3.get(key_from_qm3)); //if yes put the value from qm3 into qvec. //map.get(key) returns the value for that key
dvec.add(m.get(key_from_qm3)); // and the value from m into dvec
}
}
System.out.println("qvec : " + qvec);
System.out.println("dvec : " + dvec);
}
}
答案 1 :(得分:0)
根据可以理解,您的任务可以通过以下方式实现:
for(Map.Entry<String, Double> qe : qm3.entrySet()) {
qvec.add(qe.getValue());
dvec.add(m.getOrDefault(qe.getKey(), 0.0));
}
qvec
将包含qm3
的所有值,类似于qvec.addAll(qm3.values());
的结果,dvec
将包含与相同键或0.0
相关联的值但是,如果没有映射,则必须强调HashMap
没有定义的顺序。因此,仅在循环内填充两个列表可确保结果位置与相同的键相关联。尽管如此,它仍然是完全未定义的,哪个关键点与哪个位置有关。
此外,在您的示例中,qm3
包含的密钥少于m
,因此0.0
的后备将永远不会适用。
也许,您想要考虑两个地图的所有键:
LinkedHashSet<String> keys = new LinkedHashSet<>();
keys.addAll(qm3.keySet());
keys.addAll(m.keySet());
for(String key: keys) {
qvec.add(qm3.getOrDefault(key, 0.0));
dvec.add(m.getOrDefault(key, 0.0));
}
这将创建一个包含所有键的LinkedHashSet
,这将保留它们的插入顺序,因此您也可以稍后使用该集来查找哪个列表位置与哪个键相关联。然后,它将使用0.0
默认值填充列表。