我正在尝试使用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);
}
我尝试使用ArrayList而不使用TreeMaps或HashMaps的原因是因为我需要排序的字段不是唯一的;这是对这两个对象的限制(我无法创建自己的密钥)。
我遇到的问题是调用CustomComparator:
我在这里试图对我的arraylist进行排序:
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上的'sort(java.util.ArrayList,com.myjavacode.CustomComparator)' class'java.util.Collections'
任何帮助将不胜感激。
答案 0 :(得分:2)
我试图在try-catch块中运行你的SSJS代码,在catch块中的异常中打印错误,我收到以下消息 - java.lang.ClassCastException: lotus.domino.local.Document incompatible with lotus.notes.Document
我认为您的Document
和NotesException
的完全限定类名称不正确。它们应分别为 lotus.domino.Document
和 lotus.domino.NotesException
。
答案 1 :(得分: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;
}
}
答案 2 :(得分:1)
并不是说这个答案对你来说一定是最好的做法,但是上次我尝试做同样的事情时,我意识到我可以通过SSJS把文件作为NotesViewEntryCollection来抓取:
var col:NotesViewEntryCollection = database.getView("myView").getAllEntriesByKey(mtgUnidVal)
而不是NotesDocumentCollection。我刚刚浏览了每个条目,为那些符合我标准的人抓住了UNID,添加到java.util.ArrayList(),然后发送到目的地。我已经在其他地方对文档进行排序,使用父UNID的分类列,所以这可能是我应该先做的事情。仍处于XPage / Notes学习曲线的前沿,因此每天都会带来新的东西。
同样,如果您的集合不等同于Notes视图的一部分,抱歉,但对于那些使用简单方法的人,KISS。我经常提醒自己。