I'm using a grid to show rankings of players. The list is sorted by various comparators on the backend but there might be still scenarios where 2 rows have the same ranking. In the example below the first two rows should have number #1 and the last two should be both #2.
I implemented the ranking numbers as a column as follows:
rankings.addColumn(this::getRowIndex).setWidth("2em")
.setResizable(true);
With this method:
private String getRowIndex(TeamHasFormatRecord thfr)
{
index++;
return String.valueOf(index);
}
Which it's a basic counter. The only way I could think of is basically getting each entry and find it's place on the list but I think that might be too heavy and won't escalate well.
Any suggestions?
Update Here's the current comparator:
Comparator.comparingDouble((TeamHasFormatRecord thfr) -> thfr.getPoints())
.thenComparingDouble(thfr -> thfr.getMean())
.thenComparingDouble(thfr -> thfr.getStandardDeviation())
.reversed()
This can be achieved by changing the code a little in your
getRowIndex
method (I named itgetRanking
as it is no longer a simple index). The trick is to store the thfr of the current/iterated row for the next row to compare with. If they have the same scoring, don't increment the ranking.This solution only works if you sort the grid beforehand and you don't allow resorting from user. I think you already did that.