Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个HashMap并乘以映射值_Java_Arraylist_Hashmap - Fatal编程技术网

Java 比较两个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<

我有两个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<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)。非常感谢,现在我完全理解了。