【问题标题】:The calculation of HashMap valuesHashMap 值的计算
【发布时间】:2020-06-06 17:06:12
【问题描述】:

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

假设我有一个 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);
        }
    }

【问题讨论】:

  • 什么是ArrayList&lt;Oject,Integer&gt; charac = new ArrayList&lt;Object,Integer&gt;();?我们怎样才能拥有ArrayList&lt;Oject,Integer&gt;?不应该是男性和女性的字符串吗?
  • 仍然,这怎么可能?我们有像这样的ArrayList&lt;E&gt;,其中 E 可以是任何Object 类型。但是,在您的情况下,ArrayList&lt;E, D&gt; 是什么D 类型。我们在 Java 中没有这样的东西
  • 应该是ArrayList&lt;String&gt; charac = new ArrayList&lt;String&gt;();这样。其次,for (Object element: allCharac) { 中的allCharac 是什么。编辑您的问题并添加关于 allCharac 的内容。
  • 优秀。最后一件事解释了有关比率部分的一些信息。你如何计算它的价值?
  • 太棒了!!现在您在allCharacterCounts 中有男性和女性的总数。您可以简单地根据 MA​​LE 和 FEMALE 迭代其值并除以 1characSurvive 中只有 MALE 和 FEMALE。在您的情况下,您不需要characSurvive。它可以简单地通过除以1 来完成,例如System.out.println(allCharacterCounts.get("MALE") / 1);

标签: java arraylist hashmap


【解决方案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%

【讨论】:

  • 谢谢您,先生。我很感激。但是如果characSurvive 也有多个重复键怎么办?例如,如果有两个 Character.MALE 幸存,则幸存率为 100%
  • 不客气。 what if the characSurvive also with multiple, duplicate keys - 做起来并不难。如果你想让我这样做,请告诉我,或者你自己先试试。
  • 我先试试。谢谢你,先生,愿意解决和指导我=)
  • 我已经发布了此要求的更新 (what if the characSurvive also with multiple, duplicate keys)。
  • 不客气。我建议你开始准备OCP: Java SE 11 Developer Certification。它会帮助你摆脱所有这些想法。
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
相关资源
最近更新 更多