当前问题 :我已经构建了一个HashMap来保存和检索一些键和值。但我不知道如何通过特定名称(String)检索所有值。目前它正在打印Hashmap中的所有值,而这不是我想要实现的。
在下面的示例中,我使用以下字段
字段
String name
// Object Example
HashMap
Map<String,Example> mapOfExampleObjects = new HashMap<String,Example>();
for循环以通过某个键名从哈希映射中检索值
for(Map.Entry<String,Example> entry: mapOfExampleObjects.entrySet()){
if(mapOfExampleObjects.containsKey(name))
{
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
当前输出
John + (Exampleobject)
Ian + (Exampleobject)
Ian + (Exampleobject)
Jalisha + (Exampleobject)
我想要实现的输出
Ian + (Exampleobject)
Ian + (Exampleobject)
答案 0 :(得分:4)
Lars,你的问题是这一行:
if(mapOfExampleObjects.containsKey(name))
您的mapOfExampleObjects将始终包含密钥&#39; Ian&#39;每次你经历循环。你想要的更像是:
if( name.equals(entry.getKey()) )
答案 1 :(得分:2)
您可以提取地图的keySet
并对其进行操作以选择所需的条目:
class Example {
final String name;
Example(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
public void test() {
// Sample data.
Map<String, Example> mapOfExampleObjects = new HashMap<String, Example>();
mapOfExampleObjects.put("John", new Example("John Smith"));
mapOfExampleObjects.put("Ian", new Example("Ian Bloggs"));
mapOfExampleObjects.put("Ian", new Example("Ian Smith"));
mapOfExampleObjects.put("Jalisha", new Example("Jalisha Q"));
// Using a Set you can extract many.
Set<String> want = new HashSet<String>(Arrays.asList("Ian"));
// Do the extract - Just keep the ones I want.
Set<String> found = mapOfExampleObjects.keySet();
found.retainAll(want);
// Print them.
for (String s : found) {
System.out.println(mapOfExampleObjects.get(s));
}
}
请注意,这仍然只会打印一个Ian
,因为Map
仅针对每个键保留一个值。您需要使用不同的结构(可能是Map<String,List<Example>>
)来为每个键保留多个值。