gpt4 book ai didi

java - 比较器(排序)按优先级比较具有 3 个属性的对象数组列表

转载 作者:行者123 更新时间:2023-12-01 10:46:09 25 4
gpt4 key购买 nike

假设有一个节点,它具有三个属性: pdf:Titledc:titlenode name ,我想要根据这些属性以相同的优先级对数组进行比较和排序。因此,如果节点 1 具有所有三个属性,而节点 2 仅具有 dc:title,则应将节点 1 的 pdf:Title 与节点 2 的 dc:title 进行比较。

这是我正在使用的代码:

@Override
public int compare(Node o1, Node o2) {


try {
int compareValue;
boolean o1HasPdfTitle = o1.hasProperty("jcr:content/metadata/pdf:Title");
boolean o1HasDcTitle = o1.hasProperty("jcr:content/metadata/dc:title");
boolean o2HasPdfTitle = o2.hasProperty("jcr:content/metadata/pdf:Title");
boolean o2HasDcTitle = o2.hasProperty("jcr:content/metadata/dc:title");

if (o1HasPdfTitle && o2HasPdfTitle) {
compareValue = o1.getProperty("jcr:content/metadata/pdf:Title").getString().compareTo(o2.getProperty("jcr:content/metadata/pdf:Title").getString());
return compareValue;
} else if (o1HasPdfTitle && o2HasDcTitle) {
compareValue = o1.getProperty("jcr:content/metadata/pdf:Title").getString().compareTo(o2.getProperty("jcr:content/metadata/dc:title").getString());
return compareValue;
} else if (o1HasDcTitle && o2HasPdfTitle) {
compareValue = o1.getProperty("jcr:content/metadata/dc:title").getString().compareTo(o2.getProperty("jcr:content/metadata/pdf:Title").getString());
return compareValue;
} else if (o1HasDcTitle && o2HasDcTitle) {
compareValue = o1.getProperty("jcr:content/metadata/dc:title").getString().compareTo(o2.getProperty("jcr:content/metadata/dc:title").getString());
return compareValue;
} else if (!o1HasPdfTitle && !o1HasDcTitle && o2HasPdfTitle){
compareValue = o1.getName().compareTo(o2.getProperty("jcr:content/metadata/pdf:Title").getString());
return compareValue;
} else if (!o1HasPdfTitle && !o1HasDcTitle && o2HasDcTitle){
compareValue = o1.getName().compareTo(o2.getProperty("jcr:content/metadata/dc:title").getString());
return compareValue;
} else if (o1HasPdfTitle && !o2HasPdfTitle && !o2HasDcTitle){
compareValue = o1.getProperty("jcr:content/metadata/pdf:Title").getString().compareTo(o2.getName());
return compareValue;
} else if (o1HasDcTitle && !o2HasPdfTitle && !o2HasDcTitle){
compareValue = o1.getProperty("jcr:content/metadata/dc:title").getString().compareTo(o2.getName());
return compareValue;
} else {
compareValue = o1.getName().compareTo(o2.getName());
return compareValue;
}

} catch (Exception e) {
LOGGER.debug("CustomComparatorTitle debug message" + e);
return 0;
}

问题:排序不正确,它们不是按字母顺序排列的。我错过了什么吗?

还有没有更好的方法来编写代码而不使用这么多条件?我试图避免 IllegalArgumentException:比较方法违反了其一般契约!

最佳答案

我不确定我是否理解你的代码,但这样似乎更好:

    final String pPdf="jcr:content/metadata/pdf:Title";
final String pDC="jcr:content/metadata/dc:title";

String[] values=new String[2];
for (int i = 0; i < values.length; i++)
{
Node curNode=i==0?o1:o2;

if(curNode.hasProperty(pPdf))
values[i]=curNode.getProperty(pPdf).getString();
else if(curNode.hasProperty(pDC))
values[i]=curNode.getProperty(pDC).getString();
else
values[i]=curNode.getName();
}
return values[0].compareTo(values[1]);

这样不是更好吗?

关于java - 比较器(排序)按优先级比较具有 3 个属性的对象数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34164506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com