0

java.util.ArrayListを使用してドキュメントコレクションを並べ替えようとしています。

var myarraylist:java.util.ArrayList = new java.util.ArrayList()
var doc:NotesDocument = docs.getFirstDocument();

while (doc != null) {       
    myarraylist.add(doc)                       
    doc = docs.getNextDocument(doc);        
}

TreeMapsやHashMapsではなくArrayListを使用しようとしている理由は、並べ替えに必要なフィールドが一意ではないためです。これは、これら2つのオブジェクトの制限です(独自のキーを作成することはできません)。

私が直面している問題は、CustomComparatorを呼び出すことです。

配列リストを並べ替える方法は次のとおりです。

java.util.Collections.sort(myarraylist, new CustomComparator());

ここに私のクラス:

import java.util.Comparator;
import lotus.notes.NotesException;

public class CustomComparator implements Comparator<lotus.notes.Document>{


public int compare(lotus.notes.Document doc1, lotus.notes.Document doc2) {
    try {
        System.out.println("Here");
        System.out.println(doc1.getItemValueString("Form"));             
         return doc1.getItemValueString("Ranking").compareTo(doc2.getItemValueString("Ranking"));
    } catch (NotesException e) {
        e.printStackTrace();
    }
    return 0;
}

}

エラー:

スクリプトインタープリターエラー、line = 44、col = 23:Javaクラス'java.util.Collections'でメソッド'sort(java.util.ArrayList、com.myjavacode.CustomComparator)'を呼び出すときにエラーが発生しました

どんな助けでもありがたいです。

4

3 に答える 3

2

SSJSコードをtry-catchブロックで実行しようとしましたが、catchブロックの例外でエラーを出力しましたが、次のメッセージが表示されました-java.lang.ClassCastException: lotus.domino.local.Document incompatible with lotus.notes.Document

Documentとの完全修飾クラス名が正しくないようですNotesException。それらはそれぞれとである必要がlotus.domino.Documentありlotus.domino.NotesExceptionます。

于 2012-10-08T17:24:00.067 に答える
1

ここにRepeatControlのSSJSがあります。

var docs:NotesDocumentCollection = database.search(query, null, 0);
var myarraylist:java.util.ArrayList = new java.util.ArrayList()
var doc:NotesDocument = docs.getFirstDocument();

while (doc != null) {       
    myarraylist.add(doc)                       
    doc = docs.getNextDocument(doc);        
}

java.util.Collections.sort(myarraylist, new com.mycode.CustomComparator());
return myarraylist;

ここに私のクラス:

package com.mycode;
import java.util.Comparator;

public class CustomComparator implements Comparator<lotus.domino.Document>{


    public int compare(lotus.domino.Document doc1, lotus.domino.Document doc2) {
        try {  
             // Numeric comparison  
             Double num1 = doc1.getItemValueDouble("Ranking");
             Double num2 = doc2.getItemValueDouble("Ranking");         
             return num1.compareTo(num2);
             // String comparison
             // return doc1.getItemValueString("Description").compareTo(doc2.getItemValueString("Description"));
        } catch (lotus.domino.NotesException e) {
            e.printStackTrace();
        }
        return 0;
    }

}
于 2012-10-08T20:12:57.563 に答える
1

この回答が必ずしもベストプラクティスであるとは限りませんが、前回同じことを試みたときに、SSJSを介して代わりにNotesViewEntryCollectionとしてドキュメントを取得できることに気付きました。

var col:NotesViewEntryCollection = database.getView("myView").getAllEntriesByKey(mtgUnidVal)

NotesDocumentCollectionの代わりに。各エントリを実行し、基準を満たすUNIDを取得し、java.util.ArrayList()に追加して、宛先に送信しました。親UNIDで分類された列を使用して、他の場所で表示するためにドキュメントを既に並べ替えていたので、これがおそらく最初に行うべきことです。XPages / Notesの学習曲線の最先端にあるため、毎日何か新しいものがもたらされます。

繰り返しになりますが、コレクションがNotesビューの一部と同等でない場合は、申し訳ありませんが、利用可能な単純なアプローチを使用している場合は、KISSを使用してください。私は頻繁に思い出します。

于 2012-10-10T15:01:54.033 に答える