【发布时间】:2014-04-01 14:37:57
【问题描述】:
我需要创建一个比较器来使用几个 xpath 和优先级指示器对 arraylist 进行排序... 第一个标准是按降序对xpath进行排序,第二个标准是:如果路径相同,则优先级较高的路径将优先 这是列表:xpath 优先级
比较前:
/HTML[1]/BODY[1]/P[2] 5
/HTML[1]/BODY[1]/P[1]/text()[1] 2
/HTML[1]/BODY[1]/P[2]/text()[3] 2
/HTML[1]/BODY[1]/P[3]/text()[1] 4
/HTML[1]/BODY[1]/P[2]/text()[1] 1
/HTML[1]/BODY[1]/P[4]/text()[1] 3
/HTML[1]/BODY[1]/P[1]/text()[1] 3
对比后:
/HTML[1]/BODY[1]/P[4]/text()[1] 3
/HTML[1]/BODY[1]/P[3]/text()[1] 4
/HTML[1]/BODY[1]/P[2] 5
/HTML[1]/BODY[1]/P[2]/text()[3] 2
/HTML[1]/BODY[1]/P[2]/text()[1] 1
/HTML[1]/BODY[1]/P[1]/text()[1] 3
/HTML[1]/BODY[1]/P[1]/text()[1] 2
这是我目前所拥有的,但它无法正常工作:/
Collections.sort(mods, new Comparator<TextModification>() {
@Override
public int compare(TextModification mod1, TextModification mod2)
{
//Comapre paths
int pathComp = mod2.getPath().compareTo(mod1.getPath());
//If mod2.path is "less" than mod1.path
if(pathComp < 0){
if(mod1.getPath().startsWith(mod2.getPath())){
return 1;
}
}
//Return comparison
if(pathComp != 0){
return pathComp;
}
//If paths are the same, sort by priority indicator
return mod2.getPriority() > mod1.getPriority() ? 1 : -1;
}
});
提前致谢
【问题讨论】:
-
你得到了什么输出?
modn.getPath()返回什么类型? -
定义不能正常工作。你的单元测试通过了吗?
-
modn.getPath() 返回数组列表中对象的 xpath,modn.getPriority() 返回 xpath(int number) 的优先级 比较后得到的输出:
/HTML[1]/BODY[1]/P[4]/text()[1] 3 /HTML[1]/BODY[1]/P[3]/text()[1] 4 /HTML[1]/BODY[1]/P[2]/text()[1] 1 /HTML[1]/BODY[1]/P[2] 5 /HTML[1]/BODY[1]/P[2]/text()[3] 2 /HTML[1]/BODY[1]/P[1]/text()[1] 3 /HTML[1]/BODY[1]/P[1]/text()[1] 2如您所见,它导致/HTML[1]/BODY[1]/P[2] 的问题 ... -
"如果路径相同,优先级高的路径优先" 如果相同,优先级有什么区别?
-
在每条路径写入数字后(指示优先级),因此如果您有:
/HTML[1]/BODY[1]/P[1]/text()[1] 1和/HTML[1]/BODY[1]/P[1]/text()[1] 3它们将按这种方式排序/HTML[1]/BODY[1]/P[1]/text()[1] 3 /HTML[1]/BODY[1]/P[1]/text()[1] 1
标签: java sorting xpath arraylist comparator