遍历Map(特别是LinkedHashMap)并使用ForEach反向循环检索Key和Value

问题描述 投票:0回答:3

目前,我正在循环遍历具有重要性值的消息列表以及它自己使用的消息字符串:

for(String MessageItem : MainEngine.mCurrentLevel.mNewsFeed.mMessageList.keySet())
{
     //Do message stuff here.
}

我有一个问题,屏幕上只能显示 10 条消息,而且必须是最新的。上面的问题是它只显示索引 0 - 10。不再显示更多。

是否有办法从顶部索引开始并使用 foreach 反向进行?

java dictionary iteration linkedhashmap
3个回答
2
投票

您不能直接以相反的顺序迭代

LinkedHashMap
。 API 不允许。

您能做的最好的事情就是将键(或键/值对)复制到数组中,然后以相反的顺序迭代该数组。

(编写代码很简单......我鼓励你自己写!)


1
投票

您不必迭代它。但拔下钥匙并将其存储在列表中会很方便。这是执行 indexOf() 类型操作的唯一方法。

List<String> keyList = new ArrayList<String>(map.keySet());
// Given 10th element's key
String key = "aKey";
int idx = keyList.indexOf(key);
for ( int i = idx ; i >= 0 ; i-- ) 
System.out.println(map.get(keyList.get(i)));

有关更多详细信息,请参阅 Kal 的 answer


0
投票

从 Java 21 开始,

LinkedHashMap
具有
reversed()
方法,该方法返回地图的反向视图。 这可以以标准方式迭代。

mMessageList.reversed().forEach((key, value) -> {
  // Do something with the key and/or value
});
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.