好吧,我本来打算编辑我之前的问题,但我不确定这样做是否正确,所以我只提出另一个关于比较器的问题,现在我希望能够用不同的方式进行排序。我有一张银行支票,我想用 checkNumber 然后 checkAmount 排序 我设法用 checkNumber 做到了,但不知道如何用 checkAmount 这是我为 checkNumber 做的:
import java.util.Comparator;
public class Check implements Comparator {
private int checkNumber;
private String description;
private double checkAmount;
public Check() {
}
public Check(int newCheckNumber, double newAmountNumber) {
setCheckNumber(newCheckNumber);
setAmountNumber(newAmountNumber);
}
public String toString() {
return checkNumber + "\t\t" + checkAmount;
}
public void setCheckNumber(int checkNumber) {
this.checkNumber = checkNumber;
}
public int getCheckNumber() {
return checkNumber;
}
public void setAmountNumber(double amountNumber) {
this.checkAmount = amountNumber;
}
public double getAmountNumber() {
return checkAmount;
}
@Override
public int compare(Object obj1, Object obj2) {
int value1 = ((Check) obj1).getCheckNumber();
int value2 = ((Check) obj2).getCheckNumber();
int result = 0;
if (value1 > value2){
result = 1;
}
else if(value1 < value2){
result = -1;
}
return result;
}
}
import java.util.ArrayList;
import java.util.Collections;
import test.CheckValue;
public class TestCheck {
public static void main(String[] args) {
ArrayList List = new ArrayList();
List.add(new Check(445, 55.0));
List.add(new Check(101,43.12));
List.add(new Check(110,101.0));
List.add(new Check(553,300.21));
List.add(new Check(123,32.1));
Collections.sort(List, new Check());
System.out.println("Check Number - Check Amount");
for (int i = 0; i < List.size(); i++){
System.out.println(List.get(i));
}
}
}
非常感谢您,如果我以错误的方式提交内容,请告诉我。
最佳答案
您真正想要做的是定义一个单独的 类作为Comparator
对象 - 不要让你的实际 Check
对比较器进行分类,而是有 3 个类:
Check
类本身- 一个
CheckAmountComparator
实现Comparator<Check>
的类(或类似的东西) - 一个
CheckNumberComparator
实现Comparator<Check>
的类(或类似的东西)
然后,当您想以一种或另一种方式排序时,只需传递一个 Comparator
的实例即可。 - 与您要执行的排序类型相对应的实现类。例如,按数量排序,它会变成...
Collections.sort(yourListVariable, new CheckAmountComparator());
此外 - 我强烈建议您将变量命名为 List
以外的名称,因为 List 在 Java 中用作类型名称。
关于java - 比较器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842960/