我有一个TreeMap,其中包含3个条目,类型如下:
Map<String, Entry<String, String>> treeMap = new TreeMap<String, Entry<String, String>>();
我使用以下代码填充地图:
SimpleEntry<String, String> simpleEntry = new SimpleEntry<String, String>("", "");
for (int i = 0; i < listSites.size(); i++) {
String stringkey = listSites.get(i);
String stringValue = listSitesDesc.get(i);
String stringLink = listSitesLinks.get(i);
entry = new SimpleEntry<String, String>(stringValue, stringLink);
actionMap.put(stringkey, simpleEntry);
}
这按预期工作。
我的问题是如何从排序的TreeMap中检索单个值。
已编辑:
for (Map.Entry<String, Entry<String, String>> entrySet : treeMap.entrySet()) {
String key = entrySet.getKey();
String valueKey = simpleEntry.getKey();
String valueValue = simpleEntry.getValue();
}
这将为密钥打印正确的值,例如:
key = one , two , three , four , five .....
但是我得到的valueKey和valueValue的值错误,例如:
valueKey = bear , bear , bear , bear , bear ...
而不是:
valueKey = dog , cat , monkey, tiger , bear ....
我怎么了?
答案 0 :(得分:4)
Map.keySet()
(毫不奇怪)返回键,而不是值。
要获取值,请使用(同样,毫不奇怪)Map.values()
。
要遍历所有键/值对,即项:
for (Map.Entry<String, Entry<String, String>> entry : treeMap.entrySet()) {
// showing how to get at the parts:
String key = entry.getKey();
String valueKey = entry.getValue().getKey();
String valueValue = entry.getValue().getValue();
}
这是一种不寻常的方法,可以解决您要解决的任何问题,因为每个键只有一个值,所以您拥有“键->键->值”,与“键->相同”值”。考虑放弃使用外层地图,仅使用Map<String, String>
,和/或使用带有(命名)字段的类来存储数据。
答案 1 :(得分:0)
首先,接受@Bohemian的回答,这就是您想要的。以及将来的所有Google。它不起作用,因为您遇到了一个错误的:D(这就是为什么我们所有人都会出现堆栈溢出的原因,这取决于您对错误的定义)
SimpleEntry simpleEntry = new SimpleEntry(“”,“”);
...
actionMap.put(stringkey, simpleEntry entry );
有帮助吗?
答案 2 :(得分:0)
我不明白你的问题...
但是我如何获得地图的第二个和第三个值,这些值已定义 通过SimpleEntry?
由于尚不清楚您要查找的内容(这可能就是为什么您找不到答案的原因),这里有几种(但不是全部)迭代地图的方法:
// I'm changing your map a little to avoid confusion over the word 'Entry'.
Map<String, SimpleEntry<String, String>> treeMap = new TreeMap<>();
for (Map.Entry<String, SimpleEntry<String, String>> ent: treeMap.entrySet())
{
String key = ent.getKey();
SimpleEntry val - ent.getValue();
}
如果您使用的是Java 8或更高版本...
// Using your original map
Map<String, Entry<String, String>> treeMap = new TreeMap<>();
treeMap.forEach((key, value) ->
{
// key is a String, value is an Entry<String, String>>
});
// Explicit parameter types can increase code readability
treeMap.forEach((String key, Entry<String, String>> value) ->
{
// Have fun with the contents of your map!
});