我的比较器的比较方法不起作用
My comparator's compare method isn't working
我有一个 Customer 对象 class,它有一些变量并且正在实现一个已经与这些变量之一相关的 Comparator。但是我需要为不同的变量 last_name 实现另一个比较器。
因为我的客户中不能有 2 个 compareTo() 方法 class 我决定在这里专门为此做一个比较 class
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(客户);
它不会激活下面的 public int compare(Customer customer_1, Customer customer_2)。
坦率地说,我不知道它在排序中用作比较器的是什么;有谁知道如何解决这个问题并按 last_name?
排序
哦,一旦达到 return,它是如何设法从购买的 100(0-99) 件商品增加到 return 列表中的 103(0-102) 件商品?不知道这是怎么回事。
修复了这部分,我切换了 for 循环读取 Purchase,然后遍历所有客户的列表并找到匹配项,而不是反之亦然。
感谢任何帮助。
提前致谢。
您没有使用您的 compare
方法。
Collections.sort(customers);
上面的行按客户的自然顺序(由 Customer.compareTo()
定义)对客户进行排序,而不是根据您的比较器。相反,您可以这样做:
Collections.sort(customers, this);
现在您的 CompareByLastName
将在排序中用作比较器。
一些旁白:
- 您在比较器中使用 sort 方法的设计 class 是非常规的。不过应该可以。
在您的 compare
方法中,您不需要 if-else 结构。以下更简单的实现就足够了:
return customer_1.getLastName().compareTo(customer_2.getLastName());
我有一个 Customer 对象 class,它有一些变量并且正在实现一个已经与这些变量之一相关的 Comparator。但是我需要为不同的变量 last_name 实现另一个比较器。
因为我的客户中不能有 2 个 compareTo() 方法 class 我决定在这里专门为此做一个比较 class
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(客户);
它不会激活下面的 public int compare(Customer customer_1, Customer customer_2)。
坦率地说,我不知道它在排序中用作比较器的是什么;有谁知道如何解决这个问题并按 last_name?
排序哦,一旦达到 return,它是如何设法从购买的 100(0-99) 件商品增加到 return 列表中的 103(0-102) 件商品?不知道这是怎么回事。
修复了这部分,我切换了 for 循环读取 Purchase,然后遍历所有客户的列表并找到匹配项,而不是反之亦然。
感谢任何帮助。
提前致谢。
您没有使用您的 compare
方法。
Collections.sort(customers);
上面的行按客户的自然顺序(由 Customer.compareTo()
定义)对客户进行排序,而不是根据您的比较器。相反,您可以这样做:
Collections.sort(customers, this);
现在您的 CompareByLastName
将在排序中用作比较器。
一些旁白:
- 您在比较器中使用 sort 方法的设计 class 是非常规的。不过应该可以。
在您的
compare
方法中,您不需要 if-else 结构。以下更简单的实现就足够了:return customer_1.getLastName().compareTo(customer_2.getLastName());