Java使用SimpleEntry在地图上进行迭代

时间:2019-03-30 22:15:21

标签: java treemap

我有一个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 ....

我怎么了?

3 个答案:

答案 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!
});