我只想从树图中检索最后n个值而不考虑地图中的任何键或值。但我真的不知道如何做到这一点。下面是一段代码示例,它可以从地图中提取前5条记录。如何修改它以从地图中检索最后n条记录?
Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.entrySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
startValues.add(iterator.next());
}
答案 0 :(得分:3)
如果sortedMap
变量包含TreeMap
的实例,请使用descendingKeySet()
。它返回包含在其中的键的相反顺序。
Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.descendingKeySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
startValues.add(sortedMap.get(iterator.next()));
}
请注意,与原始代码相比,这会迭代键,而非条目。我没有对其进行测试编译,因此可能存在泛型和类型转换的小问题,但希望主要想法足够明确。
答案 1 :(得分:1)
在创建时订阅由TreeMap
对象维护的Comparator
。如果未提供Comparator
,则自然排序。
创建实现反向排序的Comparator
的最简单的解决方案,将此比较器传递给新的TreeMap
,并将旧的treemap中的所有元素添加到新的。这样,您可以重复使用代码示例来检索最后5条记录。
答案 2 :(得分:0)
获取map.keySet()并将其转换为ArrayList,然后您可以使用循环获取最后n个值,如下例所示:
Map<Integer, String> map = new HashMap<>();
map.put(1, "Praveen");
map.put(2, "shristi");
map.put(3, "tarang");
Set<Integer> keys = map.keySet();
ArrayList<Integer> list = new ArrayList<>(keys);
for(int i=1;i<list.size();i++) {
System.out.println(map.get(list.get(i)));
}