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

イテレータを使用してセットをループします。NavigableSetおよびTreeSet APIを調べたところ、降順のイテレータを提供するメソッドが見つかったので、新しいセットを逆順に作成する必要はありません。

編集: 上記はnews、 TypeTreeSetが正しいものではないという間違った仮定がありました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 に答える