java - 如何在java中使用两个哈希图计算比率
问题描述
我正在构建一个程序,该程序决定哪一组人将生存并追踪所有属性。因此,我用一个ArrayList
来保存幸存属性,另一个保存总属性以供将来计算生存率。
我已经确认我的属性保存正确,但我不知道我的 hashmap 代码有什么问题。它显示了一切0.00
。我的想法是找到每个属性的频率,并根据其频率和键计算比率。非常感谢任何帮助或提示。
Map<Object, Double> totalCounts = new HashMap<>();
Map<Object, Double> surviveCounts = new HashMap<>();
//put total characteristics in the map
for (Object element : total) {
if (totalCounts.containsKey(element)) {
totalCounts.put(element, totalCounts.get(element) + (double) 1);
} else {
totalCounts.put(element,(double) 1);
}
}
//put survived characteristics in the map
for (Object survive : survival) {
if (surviveCounts.containsKey(survive)) {
surviveCounts.put (survive, surviveCounts.get(survive) + (double) 1);
} else {
surviveCounts.put(survive, (double) 1);
}
}
for (Map.Entry<Object, Double> entrySurvive : surviveCounts.entrySet()) {
Object surviveKey = entrySurvive.getKey();
Double surviveValue = entrySurvive.getValue();
for (Map.Entry<Object, Double> entryTotal : totalCounts.entrySet()) {
Object totalKey = entryTotal.getKey();
Double totalValue = entryTotal.getValue();
if (totalKey.equals(surviveKey)) {
double percent = surviveValue / totalValue;
surviveData.put(surviveKey, percent);
} else {
surviveData.put(totalKey, (double) 0);
}
}
}
//print out the ratio
surviveData.entrySet().stream()
.sorted((k1, k2) -> -k1.getValue().compareTo(k2.getValue()))
.forEach(k -> System.out.println(k.getKey().toString().toLowerCase() + ": " +String.format("%.2f", k.getValue())));
解决方案
只要更新,如果surviceKey is equal to totalKey
for (Map.Entry<Object, Double> entrySurvive : surviveCounts.entrySet()) {
Object surviveKey = entrySurvive.getKey();
Double surviveValue = entrySurvive.getValue();
for (Map.Entry<Object, Double> entryTotal : totalCounts.entrySet()) {
Object totalKey = entryTotal.getKey();
Double totalValue = entryTotal.getValue();
if (totalKey.equals(surviveKey)) {
double percent = surviveValue / totalValue;
surviveData.put(surviveKey, percent);
}
}
}
或者你可以写,
Map<Object, Double> surviveData = surviveCounts.keySet().stream()
.filter(totalCounts::containsKey)
.collect(
Collectors.toMap(k -> k, k->surviveCounts.get(k)/totalCounts.get(k)));
推荐阅读
- javascript - 如何在一个函数中将值推送到数组并在另一个函数中读取?
- node.js - 将图片上传到aws s3后,页面重新加载图片未找到,但下次是
- vb6 - VB6 XmlHttp.send STRING 不起作用。使用 Cstr(String) 修复。帮助理解
- java - com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.studentcornerapp.studentcorner.Posts.Posts 类型
- r - 如何以与 raster::plotRGB 相同的方式显示带有 tmap 的 RasterBrick
- javascript - 如何配置为带有 react-to-print 的热敏纸打印机进行打印?
- c++ - C++17 中带有 ref-qualifier 的结构化绑定的差异编译器输出
- python - 谷歌应用引擎(python)不显示图像
- aws-lambda - Terraform 不会删除 CloudWatch 规则
- c# - 使螺旋星系臂末端密度降低的公式