0

次の問題についてあなたの助けが必要です:

私のコードには要素のリストがあります。シーズンと番号の 2 つの属性に従ってこのリストをソートする必要があります。

リストの例:

<episode_list>
<episode id="280" number="13" season="1">
<title><![CDATA[Bowl Game]]></title>
</episode>
<episode id="314" number="12" season="1">
<title><![CDATA[Piss Test]]></title>
</episode>
<episode id="730" number="11" season="1">

Collections.sort() を使用していますが、例外が発生します。私が理解しているように、JDOM要素では使用できません:

List<Element> episodes;

Collections.sort(episodes, new Comparator<Element>() {

            @Override
            public int compare(Element elem1, Element elem2) {
                Integer seasonNumber1 = Integer.valueOf(myService.valueOfAttribute("season", elem1));
                Integer seasonNumber2 = Integer.valueOf(myService.valueOfAttribute("season", elem2));
                int seasonComp = seasonNumber1.compareTo(seasonNumber2);
                if (seasonComp != 0) {
                    return seasonComp;
                } else {
                    Integer episodeNumber1 = Integer.valueOf(myService.valueOfAttribute("number", elem1));
                    Integer episodeNumber2 = Integer.valueOf(myService.valueOfAttribute("number", elem2));
                    return episodeNumber1.compareTo(episodeNumber2);
                }                  
            }      
        });


Exception: java.util.Collections$UnmodifiableList$1.set(Unknown Source)
          java.util.Collections.sort(Unknown Source)

実際には、並べ替えられた xml は必要ありません。必要なのはエピソード属性「id」だけです (最低シーズンと最低エピソード番号)。

何をお勧めしますか?私はすべての要素を調べる別の実装を持っていますが、それは良い解決策だとは思いません.Javaクラスのエピソード(id、エピソード、シーズン)を作成し、リストをリストに変換してソートすることもできますが、それは良い考えだとは思わないでください。ElementのsortContentメソッドもありますが、実装方法がわかりません。

どんな助けにも感謝します。

4

2 に答える 2

2

JDOM 要素に添付されたコンテンツは、標準の Collections.sort() メカニズムを使用してソートすることはできません。これは、そのプロセスが XML コンテンツに対して一度に 1 か所にのみ添付するという規則を順守しないためです。

JDOM には Element クラスに組み込まれた sort() メソッドがあり、チリ要素またはその他の子コンテンツを並べ替えることができます。JDOM の方法については、 Element.sortChildren() Javadoc を参照してください。

更新: また、参考までに、ある時点でリストの変更不可能なバージョンを作成したため、発生しているエラーが発生しています....これは、JDOM メソッド呼び出しから発生するものではありません。表示されるエラーは、意図的に読み取り専用にされたリストを変更しようとしているためです。

于 2013-09-04T20:08:25.113 に答える