java - HashMap 值的计算
问题描述
我有一个使用哈希映射的项目。我的目标是计算每个独特特征的存活率。
假设我有一个 ArrayList 来存储枚举的特征。因此,这个 ArrayList 可以包含多个重复的特征。
ArrayList<Object> allCharac = new ArrayList<Object>();
[MALE,FEMALE,FEMALE,MALE,FEMALE]
ArrayList<Object> characSurvive = new ArrayList<Object>();
[MALE,FEMALE]
因此,存活率是:
male:0.50 = 1/2 (characSurvive/allCharac)
female:0.33 = 1/3
我可以使用哈希映射来计算 ArrayList 中每个唯一值的出现。但是,如何使用每个哈希图中的值来计算比率?非常感谢任何帮助。
Map<Object,Integer> allCharacterCounts = new HashMap<Object,Integer>();
for (Object element: allCharac) {//from the above ArrayList
if (allCharacterCounts.containsKey(element)) {
allCharacterCounts.put(element, allCharacterCounts.get(element)+1);
} else {
allCharacterCounts.put(element, 1);
}
}
解决方案
执行以下操作:
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
enum Character {
MALE, FEMALE;
}
public class Main {
public static void main(String[] args) {
List<Character> allCharac = List.of(Character.MALE, Character.FEMALE, Character.FEMALE, Character.MALE,
Character.FEMALE);
List<Character> characSurvive = List.of(Character.MALE, Character.FEMALE);
//Create frequency map
Map<Character, Long> allCharacFreq = allCharac.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
for (Character character : characSurvive) {
System.out.println(
character + ": " + String.format("%.2f", ((1.0 / allCharacFreq.get(character)) * 100)) + "%");
}
}
}
输出:
MALE: 50.00%
FEMALE: 33.33%
如果characSurvive
也可以有重复值,请替换1.0
为每个值的频率characSurvive
。
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
enum Character {
MALE, FEMALE;
}
public class Main {
public static void main(String[] args) {
List<Character> allCharac = List.of(Character.MALE, Character.FEMALE, Character.FEMALE, Character.MALE,
Character.FEMALE);
List<Character> characSurvive = List.of(Character.MALE, Character.MALE, Character.FEMALE);
// Create frequency map for `allCharac`
Map<Character, Long> allCharacFreq = allCharac.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
// Create frequency map for `characSurvive`
Map<Character, Long> characSurviveFreq = characSurvive.stream()
.collect(Collectors.groupingBy(e -> e, Collectors.counting()));
for (Character character : characSurviveFreq.keySet()) {
double percent = ((double) (characSurviveFreq.get(character)) / allCharacFreq.get(character)) * 100;
System.out.println(character + ": " + String.format("%.2f", percent) + "%");
}
}
}
输出:
FEMALE: 33.33%
MALE: 100.00%
推荐阅读
- node.js - Electron - 构建应用程序时找不到模块“应用程序”
- javascript - 烧瓶 json 响应在 ajax 成功处理程序中失败
- c# - 最好的做法总是在机器人中开始对话吗?
- php - 按域排序,优先考虑某些域
- react-native - 在 Testflight 中打开应用程序时卡在启动画面上
- python - 将 JSON 正文发布到 Flask 应用程序,抛出“500 - 内部服务器错误”
- javascript - 恢复位置后如何将插入符号移动到具有范围的新行?
- excel - Excel 和本地文件的超链接
- java - 如何使用 POI api 在 excel 中验证特定标题名称的所有列
- python - 固定y轴的比例/大小