在没有可用的entrySet()的情况下迭代NavigableSet

时间:2013-03-12 18:55:31

标签: java map iterator treemap cq5

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

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

2 个答案:

答案 0 :(得分:3)

使用迭代器遍历集合。查看NavigableSetTreeSet apis,我找到了一个给出降序迭代器的方法,因此不需要以相反的顺序创建一个新的集合。

修改:上面的错误假设是news属于TreeSet类型而不是正确的TreeMap。代码已更改为正确的类型以获得正确的代码。

Iterator newsItr = news.descendingKeySet().iterator();
while(newsIter.hasNext()){
    out.println( news.get(newsItr.next()) + "<br>");
}

答案 1 :(得分:1)

news.descendingMap().entrySet();