java - 比较器接口(interface)

标签 java

好吧,我本来打算编辑我​​之前的问题,但我不确定这样做是否正确,所以我只提出另一个关于比较器的问题,现在我希望能够用不同的方式进行排序。我有一张银行支票,我想用 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 个类:

  1. Check类本身
  2. 一个CheckAmountComparator实现 Comparator<Check> 的类(或类似的东西)
  3. 一个CheckNumberComparator实现 Comparator<Check> 的类(或类似的东西)

然后,当您想以一种或另一种方式排序时,只需传递一个 Comparator 的实例即可。 - 与您要执行的排序类型相对应的实现类。例如,按数量排序,它会变成...

Collections.sort(yourListVariable, new CheckAmountComparator());

此外 - 我强烈建议您将变量命名为 List 以外的名称,因为 List 在 Java 中用作类型名称。

关于java - 比较器接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842960/

相关文章:

java - 避免 Android 中绘制/布局操作期间出现对象分配错误

java - 如何使用字符串调用方法

java - "Error: Could not find or load main class", 使用外部 Jar 和多个类

java - 先前有效的功能的链接不满意

Java Future - Spring Authentication 在 AuditorAware 中为空

java - 如何中止正在进行的 GWT RequestBuilder 请求?

java - apache tomcat 服务器上的数据库 postgresql

java - BlazeDS StreamingAMF : How to detect when flex client closes the connection?

java - 如何使用 PrintStream 写入文本文件而不在每行之间留空行?

java - 迁移到 JDK 11 + JavaFX 11 时出现 RuntimeException