gpt4 book ai didi

java - 如何更改比较器的compare()方法内的变量值

转载 作者:行者123 更新时间:2023-11-30 05:42:27 25 4
gpt4 key购买 nike

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

我尝试声明一个局部变量并在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

我怎样才能实现这个目标?

最佳答案

为此,您有 2 个选择:

  • 使用整数数组代替 int
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[0]++;
return 0;
}
}
});
//use counter
  • 使用带有 int 属性的自定义类
final MyCounter counter = new MyCounter();
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.incrementN();
return 0;
}
}
});
// use counter

class MyCounter {
private int n;

public MyCounter() {
this.n = 0;
}

public int getN() {
return n;
}

public void incrementN() {
this.n++;
}
}

希望这有帮助。

<小时/>

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

关于java - 如何更改比较器的compare()方法内的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com