HashMap值的计算

问题描述 投票:0回答:1

我有一个使用哈希图的项目。我的目的是计算每个独特特征的存活率。

假设我有一个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);
        }
    }
java arraylist hashmap
1个回答
0
投票

执行以下操作:

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%
© www.soinside.com 2019 - 2024. All rights reserved.