Java 比较两个HashMap并乘以映射值
我有两个HashMap,假设它们具有以下值:Java 比较两个HashMap并乘以映射值,java,arraylist,hashmap,Java,Arraylist,Hashmap,我有两个HashMap,假设它们具有以下值: HashMap1 : <x, 1>, <y, 2>, <z, 3> HashMap2 : <x,10>, <y, 20>, <z,30> HashMap1:, HashMap2:, 我想乘以相应的值,然后对这些值求和,比如:1*10+2*20+3*30。但是,我不确定是否必须使用2个循环或其他迭代。我使用了一个循环,但没有解决问题: for (Map.Entry<
HashMap1 : <x, 1>, <y, 2>, <z, 3>
HashMap2 : <x,10>, <y, 20>, <z,30>
HashMap1:,
HashMap2:,
我想乘以相应的值,然后对这些值求和,比如:1*10+2*20+3*30。但是,我不确定是否必须使用2个循环或其他迭代。我使用了一个循环,但没有解决问题:
for (Map.Entry<Character, Integer> entry : map1.entrySet()) {
int sum=0;
if(map2.containsKey(entry.getKey())) {
sum+=entry.getValue() * ...; //it gets map1 values but I also need map2 values to multiply
}
}
for(Map.Entry:map1.entrySet()){
整数和=0;
if(map2.containsKey(entry.getKey())){
sum+=entry.getValue()*…;//它获取map1值,但我还需要map2值进行乘法
}
}
如何修复它?在
Java8
之前:
int sum = 0;
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
sum += entry.getValue() * map2.getOrDefault(entry.getKey(), 1);
}
int sum = map1.entrySet().stream()
.mapToInt(e -> e.getValue() * map2.getOrDefault(e.getKey(), 1)).sum();
注:您还需要处理两个贴图之间不同的关键点。我假设这两个贴图包含完全相同的键。只是为了让它简单明了。在
Java8
之前:
int sum = 0;
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
sum += entry.getValue() * map2.getOrDefault(entry.getKey(), 1);
}
int sum = map1.entrySet().stream()
.mapToInt(e -> e.getValue() * map2.getOrDefault(e.getKey(), 1)).sum();
注:您还需要处理两个贴图之间不同的关键点。我假设这两个贴图包含完全相同的键。简单明了。
sum+=entry.getValue()*map2.get(entry.getKey())
sum+=entry.getValue()*map2.get(entry.getKey())
乘以0
将破坏方法2中的结果,在中使用0或1(e.getKey(),0)
不会改变方法1中的结果。是否有任何错误?@hexadecimal,在这两种情况下,map2中使用的默认值。getOrDefault(e.getKey(),defaultValue)
应该为0
或1
给出相同的结果。例如,假设HashMap2
不包含键y
。在这种情况下,默认值设置为0
sum是100
(1*10+2*0+3*30),对于1
sum是102
(1*10+2*1+3*30)。非常感谢,现在我完全理解了。乘以0
将破坏方法2的结果,在中使用0或1(e.getKey(),0)
不会更改结果,而在方法1中会更改。是否有任何错误?@hexadecimal,在这两种情况下,map2中使用的默认值。getOrDefault(e.getKey(),defaultValue)
应该为0
或1
给出相同的结果。例如,假设HashMap2
不包含键y
。在这种情况下,默认值设置为0
sum是100
(1*10+2*0+3*30),对于1
sum是102
(1*10+2*1+3*30)。非常感谢,现在我完全理解了。