我有一个TreeMap,我按键反向排序,并尝试循环输出值,但NavigableSet没有entrySet()
作为方法,这是我找到的所有示例。
我的java非常新手,所以我现在知道我修改我在示例中看到的代码。
<%@page
import="java.util.Iterator,
java.util.Map,
java.util.TreeMap,
java.util.NavigableSet,
com.day.cq.wcm.api.PageFilter"
%>
TreeMap<String, String> news = new TreeMap<String, String>();
String listroot = properties.get("listRoot", currentPage.getPath());
Page rootPage = pageManager.getPage(listroot);
if (rootPage != null) {
Iterator<Page> children = rootPage.listChildren(new PageFilter(request));
while (children.hasNext()) {
Page child = children.next();
String title = child.getTitle(); //value
String url = child.getPath(); //value
String dcreated = child.getProperties().get("jcr:created",""); //key
news.put( dcreated, title + "::" + url );
}
NavigableSet nset = news.descendingKeySet(); //Reverse order the entries
for( String value : nset.values() ) { //I know this is incorrect.
out.println( value + "<br>");
}
}
%>
我确信有一种更有效的方法可以做到这一点,但现在我可以想出来。
答案 0 :(得分:3)
使用迭代器遍历集合。查看NavigableSet和TreeSet apis,我找到了一个给出降序迭代器的方法,因此不需要以相反的顺序创建一个新的集合。
修改:上面的错误假设是news
属于TreeSet
类型而不是正确的TreeMap
。代码已更改为正确的类型以获得正确的代码。
Iterator newsItr = news.descendingKeySet().iterator();
while(newsIter.hasNext()){
out.println( news.get(newsItr.next()) + "<br>");
}
答案 1 :(得分:1)
news.descendingMap().entrySet();