java - 如何在 Java 中比较 2 个不同的 hashmap
问题描述
我有 2 个转换为 HashMaps 的字符串,第一个是用户提供给应用程序的输入。第二个是一个包含很多单词的数组。
我需要比较两个 HashMap 以检查输入是否可以重新组织以匹配 Array 的单词之一。无需使用用户输入到系统的每个字符,第一个 HashMap 中可能有一些剩余的字符,但我需要确保它们可以匹配数组中的一个单词(第二个 HashMap)。
下面是我创建第一个 HashMap 的方法:
String normalizedInputWord = normalizeString(inputWord);
Map<Character, Integer> countDuplicateMapInput = new HashMap<>();
char[] charInputArray = normalizedInputWord.toCharArray();
for (char c: charInputArray) {
if (countDuplicateMapInput.containsKey(c)) {
countDuplicateMapInput.put(c, countDuplicateMapInput.get(c) + 1);
} else {
countDuplicateMapInput.put(c, 1);
}
}
这是第二个:
Map<Character, Integer> countDuplicateMapArray = new HashMap<>();
for (int i = 0; i < 1; i++) {
// Calls a function to normalize each String of the wordArray Array
String normalizedWordArray = normalizeString(wordArray[i]);
char[] charWordArray = normalizedWordArray.toCharArray();
for (char c : charWordArray) {
if (countDuplicateMapArray.containsKey(c)) {
countDuplicateMapArray.put(c, countDuplicateMapArray.get(c) + 1);
} else {
countDuplicateMapArray.put(c, 1);
}
}
}
如何比较这两种结构并获得对以下示例的“真实”响应?
示例:输入是“不可阻挡的”并且 countDuplicateMapInput 将具有:
{
key: "p", value: 2;
key: "a", value: 1;
key: "b", value: 1;
key: "s", value: 1;
key: "t", value: 1;
key: "u", value: 1;
key: "e", value: 1;
key: "l", value: 1;
key: "n", value: 1;
key: "o", value: 1;
}
我的 Array 中有一个单词“stop”,它将以这种方式填充 countDuplicateMapArray:
{
key: "p", value: 1;
key: "t", value: 1;
key: "s", value: 1;
key: "o", value: 1;
}
解决方案
有点难以理解您的要求,但我认为您需要一个测试来检查第二个映射中的所有键是否在第一个映射中的值大于或等于第二个映射的值。
如果这是正确的,那么:
countDuplicateMapArray.entrySet().stream()
.allMatch(e -> countDuplicateMapInput.getOrDefault(e.getKey(), 0) >= e.getValue())
另请注意,您可以使用merge
简化代码来创建地图:
countDuplicateMapInput.merge(c, 1, Integer::sum);
或者更好的是直接从输入创建地图:
Map<Integer,Long> characterCounts = normalizeString(inputWord).chars().boxed()
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
这使用Integer
而不是Character
表示字符(通过零扩展字符),但它不应该对您有任何影响,因为您只是在谓词中使用它们。
推荐阅读
- node.js - 方法 model.find() 中的猫鼬和邮递员错误
- regex - XSLT:如何将文本字符串拆分为短语或单词
- python - 错误:不支持多类格式,AUROC
- r - 在 data.frame 列上拆分数据
- python - 如果要导入文件路径,是否可以使用 pygame 播放文件?
- r - 如何基于 R 中的另一个变量创建条件变量?
- dictionary - 从 set_fact 创建键时如何检索字典值
- c# - 从 C# 中的字符串列表创建 JSON 对象
- odoo - (Odoo) 如何隐藏应用列表并阻止用户访问开发者模式?
- python - 运行 flake8。为什么我会收到此错误。线程与它有什么关系?