gpt4 book ai didi

java - HashMap值的计算

转载 作者:行者123 更新时间:2023-12-01 16:22:20 27 4
gpt4 key购买 nike

我有一个使用 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

我可以使用 HashMap 来计算 ArrayList 中每个唯一值的出现次数。但是,如何使用每个 HashMap 中的值来计算比率?非常感谢任何帮助。

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%

关于java - HashMap值的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62235157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com