Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在比较器的compare()方法中更改变量值_Java_Comparator - Fatal编程技术网

Java 如何在比较器的compare()方法中更改变量值

Java 如何在比较器的compare()方法中更改变量值,java,comparator,Java,Comparator,我想在排序时获得重复数据的计数。为此,我使用了一个比较器。我想在比较的两个对象具有相同属性时增加计数器变量 我已经尝试声明一个局部变量,并在compare()方法中递增它。但是为了在比较方法中使用它,需要将它声明为final,但它是final,那么它的值就不能更改 int counter = 0; Collections.sort(drivDataList, new Comparator<DrivData>() { @Override public int compa

我想在排序时获得重复数据的计数。为此,我使用了一个比较器。我想在比较的两个对象具有相同属性时增加计数器变量

我已经尝试声明一个局部变量,并在compare()方法中递增它。但是为了在比较方法中使用它,需要将它声明为final,但它是final,那么它的值就不能更改

int counter = 0;
Collections.sort(drivDataList, new Comparator<DrivData>() {
    @Override
    public int compare(DrivData o1, DrivData o2) {
        long l1 = o1.getTime();
        long l2 = o1.getTime();
        if (l1 > l2) {
            return 1;
        } else if (l1 < l2) {
            return -1;
        } else {
            counter++;
            return 0;
        }
    }
});
// use counter
int计数器=0;
Collections.sort(drivDataList,newcomparator(){
@凌驾
公共整数比较(DrivData o1、DrivData o2){
长l1=o1.getTime();
长l2=o1.getTime();
如果(l1>l2){
返回1;
}else if(l1

如何实现这一点?

您可以在一个类中实现
比较器
,并在此类中将计数器声明为字段,如下所示:

 class Ddcomparator implements Comparator<DrivData> {

    int counter = 0;

    public int getCounter() {
        return counter;
    }

    public void setCounter(int counter) {
        this.counter = counter;
    }

    @Override
    public int compare(DrivData o1, DrivData o2) {
        long l1 = o1.getTime();
        long l2 = o1.getTime();
        if (l1 > l2) {
            return 1;
        } else if (l1 < l2) {
            return -1;
        } else {
            counter++;
            return 0;
        }
    }
    }

为此,您有两种选择:

  • 使用整数数组而不是int
final int[]计数器={0};
Collections.sort(drivDataList,newcomparator(){
@凌驾
公共整数比较(DrivData o1、DrivData o2){
长l1=o1.getTime();
长l2=o1.getTime();
如果(l1>l2){
返回1;
}else if(l1
  • 使用带有int属性的自定义类
final MyCounter counter=new MyCounter();
Collections.sort(drivDataList,newcomparator(){
@凌驾
公共整数比较(DrivData o1、DrivData o2){
长l1=o1.getTime();
长l2=o1.getTime();
如果(l1>l2){
返回1;
}else if(l1
希望这有帮助


更新: 正如@andrianekena moise所指出的,您还可以创建一个带有扩展Comparator的计数器字段的类

    Ddcomparator comparator = new Ddcomparator();
    Collections.sort(drivDataList, comparator);
    int counter = c.getCounter();