我有一个客户对象类,它有一些变量,并且已经实现了一个关于其中一个变量的比较器。然而,我需要为不同的变量last_name实现另一个比较器。
因为我的Customer类中不能有2个compareTo()方法,所以我决定在这里专门创建一个Comparing类
public class CompareByLastName implements Comparator<Customer> {
private List<Purchase> purchases;
private List<Customer> customers;
public CompareByLastName(List<Purchase> purchases, List<Customer> customers) {
this.purchases = purchases;
this.customers = customers;
}
/**
* @param descending
* @return will be a sorted, in ascending, or descending, array of customer's according to their authors.
*/
public List<Purchase> sortByLastName(boolean descending){
List<Purchase> return_List = new LinkedList<Purchase>();
Collections.sort(customers);
if(descending == true) {
Collections.reverse(customers);
}
for(Customer customer : customers) {
for(Purchase purchase_info : purchases) {
if(customer.getId() == purchase_info.getCustomer_id()) {
return_List.add(purchase_info);
}
}
}
return return_List;
}
@Override
public int compare(Customer customer_1, Customer customer_2) {
int result = customer_1.getLastName().compareTo(customer_2.getLastName());
if(result < 0) {
return -1;
}
else if(result > 0) {
return 1;
}
else {
return 0;
}
}
}
但一旦触及Collections.sort(客户);
它不会激活下面的公共int比较(Customer Customer_1,Customercustomer_2)。
坦白地说,我不知道在这种情况下它作为比较器有什么用;有人知道如何解决这个问题,让它按姓氏排序吗?
哦,一旦它返回了一些,如何设法从购买的100(0-99)个项目到返回列表的103(0-102)个项目?不知道这是怎么发生的。
修复了这一部分,我将for循环切换为Purchase,然后浏览所有客户的列表并找到匹配项,而不是反过来。
任何帮助,不胜感激。
先谢谢你。
您没有使用比较
方法。
Collections.sort(customers);
上面的行按客户的自然顺序(由 Customer.compareTo(
) 定义)对客户进行排序,而不是根据您的比较器。相反,您可以这样做:
Collections.sort(customers, this);
现在,您的< code>CompareByLastName将在排序中用作比较器。
几个旁白:
>
在compare
方法中,不需要if-else构造。以下简单得多的实现就足够了:
return customer_1.getLastName().compareTo(customer_2.getLastName());
我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和
谁能解释一下为什么下面的代码不起作用: 但这一个有效: 换句话说,与创建普通类实例相比,接口实现何时是可互换的?当我使用compareTo()方法时会出现错误,该方法是Comparable接口的一部分,由所有包装类(如整数)实现。 所以我猜
假设我有一个双人课 我希望对它进行排序,首先是第一个值,然后是第二个值。现在,如果我这样做 一切都很好,列表按对的第一个值排序,但如果我这样做 它因错误而失败 好吧,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它适用于comparing()而不适用于comparing()。然后比较()?
我正在做一个关于java类的介绍的作业,该作业要求使用方法将温度从摄氏转换为华氏,反之亦然。它需要使用三种比较方法,而我无法弄清楚该把什么放进去。以下是说明: 三种比较方法: -此方法将另一个温度作为参数,如果调用对象具有与other相同的温度,则返回true,否则返回false。注意,摄氏温度可以等于华氏温度,如上式所示。 -如果调用对象的温度低于其他温度,则此方法将返回true,否则返回fal
问题内容: 我需要编写一个比较器,它采用类型A的对象A和类型B的对象B。这两个对象不是公共对象的扩展。它们的确不同,但是我需要通过其中的通用字段来比较这两个对象。我必须使用比较器接口,因为对象存储在Set中,并且在必须对CollectionUtils执行操作之后。我在Google上搜索了一下,发现了Comparator的解决方案,但只有相同的类型。 我试图朝这个方向实施思考,但是我不知道我是否在正
我需要写一个比较器,取一个a类型的对象a和一个B类型的对象B。这两个对象不是一个公共对象的扩展。他们确实是不同的,但我需要比较这两个对象在它的共同领域。我必须使用比较器接口,因为对象存储在Set中,之后我必须使用CollectionUtils进行操作。我搜索了一点点,我用比较器找到了解决方案,但只有相同的类型。 TXS 附注:我在不同的集合中添加两个对象: 之后我会这样想: