Key : 22 Value: Abey
Key : 22 Value : Dawn
Key : 22 Value : Sherry
Key : 22 Value : Sherry
Key : 22 Value : Sherry
我想只打印Sherry的Keys,如何用Java做?
因为HashMap不存储重复的Keys,所以改变了问题的标题。
HashMap不接受重复的键。只接受重复的值。在你的方法中,你不可能像你所显示的那样能够存储所有的记录,例如:当你打印HashMap的输出时,你不可能打印所有的记录。
Map<Integer, String> map = new HashMap<>();
map.put(22, "Abey");
map.put(22, "Dawn");
map.put(22, "Sherry");
map.put(22, "Sherry");
map.put(22, "Sherry");
例如: 当你打印HashMap的输出时, 你只能得到一个输出,因为同一个键会被替换成最新的值。
例如:当你打印HashMap的输出时,你只能得到一个输出,因为同一个键会被替换成最新的值。
{22=Sherry}
如果你真的想存储重复的键,请学习更多关于如何在HashMap中存储重复的键。
你可以使用下面这个JDK1.8及以上版本的方法来完成这个任务。
List<Integer> keys = hashMap.entrySet().stream()
.filter((entry) -> entry.getValue().equals("Sherry"))
.map(entry -> entry.getKey())
.collect(Collectors.toList());
我认为你需要在地图中循环。没有特定的函数来完成这个任务
map.forEach((k,val) -> {
if (val.equals("Sherry") {
keys.add(k);
}
});
其中map是HashMap,keys是一个列表。
你可以使用下面的代码。
static < K, V > List < K > getAllKeysForValue(Map < K, V > mapOfWords, V value) {
List < K > listOfKeys = null;
//Check if Map contains the given value
if (mapOfWords.containsValue(value)) {
// Create an Empty List
listOfKeys = new ArrayList < > ();
// Iterate over each entry of map using entrySet
for (Map.Entry < K, V > entry: mapOfWords.entrySet()) {
// Check if value matches with given value
if (entry.getValue().equals(value)) {
// Store the key from entry to the list
listOfKeys.add(entry.getKey());
}
}
}
// Return the list of keys whose value matches with given value.
return listOfKeys;
}
也许你可以使用反向地图,将Sherry、Dawn和Abey作为键,22作为列表的值。你可以有这样的东西。
Map<String , Set<String> > reverseMap;
现在你可以存储 诸如22号键 中,并以该地图的密钥作为名称。