java - 比较器不工作,我找不到错误
问题描述
我正在尝试使用比较器对象对从数据库中获取的对象列表进行排序。它应该比较姓氏,如果姓氏相同,它应该比较名字并确定它们的顺序,所以如果我有这样的列表:
[Jon Doe][Zed Adams][John Adams]
它应该这样排序:
[John Adams][Zed Adams][Jon Doe]
现在让我们看一下我的代码:
比较器类:
public class ComparatorContactByName implements Comparator<Contact> {
@Override
public int compare(Contact c1, Contact c2) {
// if lastNames of compared objects are not the same, compare them
if(!c1.getLastName().toLowerCase().equals(c1.getLastName().toLowerCase())){
return c1.getLastName().compareTo(c2.getLastName());
// if lastNames are the same, compare by firstName
}else if(c1.getLastName().toLowerCase().equals(c1.getLastName().toLowerCase())){
return c1.getFirstName().toLowerCase().compareTo(c2.getFirstName().toLowerCase());
// other case like firstName and lastName are the same, compare by id
}else{
return c1.getContactId() - c2.getContactId();
}
}
}
控制器方法:
public void getAllContactsSortedByName(){
List<Contact> allContacts = ContactRepository.listAllContacts();
Comparator comparatorContactByName = new ComparatorContactByName();
Collections.sort(allContacts, comparatorContactByName);
if (allContacts == null) {
System.out.println("No contact found. ");
} else {
for (Contact contact : allContacts) {
System.out.println(contact.toString());
}
}
}
调用此方法后,我得到如下输出:
Contact{contactId= 133, firstName= John, lastName= Adams, email= ja@email.com, groups= [gym]}
Contact{contactId= 126, firstName= Jon, lastName= Doe, email= jd@email.com, groups= [work, gym]}
Contact{contactId= 130, firstName= Zed, lastName= Adams, email= za@email.com, groups= [work]}
“Zed”应该是第二名,但他是最后一名。任何想法如何解决这个逻辑?
解决方案
这就是你所做的:
c1.getLastName().toLowerCase().equals(c1.getLastName().toLowerCase()
您正在将c1 的姓氏与c1 的姓氏进行比较
而是这样做:
c1.getLastName().toLowerCase().equals(c2.getLastName().toLowerCase()
名字也一样!
推荐阅读
- macos - 运行“vagrant up”并在mac上挂载NFS共享文件夹时出现“不允许操作”错误
- excel - Excel VBA 提交按钮调试
- c++ - 有没有办法通过在后台加载.a来运行后台进程
- mysql - 为什么当更新数据总是返回时,mysql的typeorm(v.0.2.40)受到影响:1虽然它没有更新任何东西?
- php - 在 MacOS arm64e 中安装 php-decimal 并且无法获取 libmpdec
- typescript - 应用装饰器后,“this”在方法中变得未定义
- python - 如何散点图每组熊猫数据框
- c# - Avalonia UI 中的 FrameworkPropertyMetadataOptions.AffectsParentArrange?
- c# - wpf中的Datagrid在单元格中显示角落
- python-3.x - Apache Airflow:如何将非模板化参数传递给 Airflow 2.0 中的模板字段