0

我有一个 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>");
        }
    }
%>

我确信有一种更有效的方法可以做到这一点,但现在这是我能想到的。

4

2 回答 2

3

使用迭代器循环遍历集合。查看NavigableSetTreeSet api,我发现了一种提供降序迭代器的方法,因此不需要以相反的顺序创建新集合。

编辑:以上是错误的假设,即news类型TreeSet不正确TreeMap。代码已更改为正确的类型以成为正确的代码。

Iterator newsItr = news.descendingKeySet().iterator();
while(newsIter.hasNext()){
    out.println( news.get(newsItr.next()) + "<br>");
}
于 2013-03-12T19:16:06.680 回答
1
news.descendingMap().entrySet();
于 2013-03-12T19:07:46.027 回答