我想获得排序时重复数据的计数。为此,我正在使用比较器。当要比较的两个对象具有相同的属性时,我想增加计数器变量。
我尝试声明一个局部变量,然后在compare()方法中对其进行递增。但是,要在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
我该如何实现?
答案 0 :(得分:1)
为此,您有2个选择:
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
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。
答案 1 :(得分:0)
您可以在一个类中实现cannot convert from System.Threading.Task.Task to System.Func<System.Threading.Task.Task>
,并在此类中将counter声明为字段:
Comparator<DrivData>
然后,您可以在以下位置获取 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;
}
}
}
变量:
counter