gpt4 book ai didi

java - 按字符串属性对自定义类型数组进行排序?

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

我有一个自定义类型的数组,我想按其字符串属性之一对其进行排序。由于某种原因,以下代码产生错误的结果。你能指出我哪里可能犯了错误吗?

class PatientLNComparator implements Comparator<Patient>{
@Override
public int compare(Patient p1, Patient p2) {
String p1_LN = (p1 == null) ? null : p1.last_name;
String p2_LN = (p2 == null) ? null : p2.last_name;

if(p2_LN == null)
return -1;
else if(p1_LN == null)
return +1;
else if(p1_LN.equals(p2_LN))
return 0;
else if(p1_LN.compareTo(p2_LN) > 0)
return -1;
else
return +1;
}
}

最佳答案

首先要解决的一个问题 - 如果您给两个具有空名称的患者或两个空患者引用,您的比较器就会不一致。特别是:

Patient p1 = null;
Patient p2 = null;

int x = comparator.compare(p1, p2);
int y = comparator.compare(p2, p1);

xy 的符号应该不同 - 但它们都是 -1。

之后,这取决于您想要如何比较名称。我通常会使用

return p1_LN.compareTo(p2_LN);

如果你想按升序排序。请注意,要按降序排序,您不应只返回-p1_LN.compareTo(p2_LN),就好像比较返回 Integer.MIN_VALUE 一样,求反不会工作。相反,您需要返回 p2_LN.compareTo(p1_LN);

请注意,如果您使用此方案,则无需调用 p1_LN.equals(p2_LN) - 这将由 compareTo 调用处理.

关于java - 按字符串属性对自定义类型数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881437/

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