首页 > 解决方案 > Vaadin Grid:如何有一个排名行

问题描述

我正在使用网格来显示玩家的排名。该列表按后端的各种比较器排序,但可能仍然存在 2 行具有相同排名的情况。在下面的示例中,前两行应该有编号#1,最后两行应该都是#2。

在此处输入图像描述

我将排名数字实现为一列,如下所示:

rankings.addColumn(this::getRowIndex).setWidth("2em")
            .setResizable(true);

使用这种方法:

private String getRowIndex(TeamHasFormatRecord thfr)
  {
    index++;
    return String.valueOf(index);
  }

这是一个基本的计数器。我能想到的唯一方法基本上是获取每个条目并找到它在列表中的位置,但我认为这可能太重并且不会很好地升级。

有什么建议么?

更新 这是当前的比较器:

    Comparator.comparingDouble((TeamHasFormatRecord thfr) -> thfr.getPoints())
              .thenComparingDouble(thfr -> thfr.getMean())
              .thenComparingDouble(thfr -> thfr.getStandardDeviation())
              .reversed()

标签: javavaadin-gridvaadin12

解决方案


创建一个 TreeSet 并将每一行的点添加到集合中。使用集合的长度返回排名。

(加 10){10} -> 1

(加 10){10} -> 1

(加 0){10, 0} -> 2

(加 0){10,0} -> 2


推荐阅读