代码之家  ›  专栏  ›  技术社区  ›  javydreamercsw

vaadin网格:如何进行排名

  •  1
  • javydreamercsw  · 技术社区  · 6 年前

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

    enter image description here

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

    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()
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Haleem    6 年前

    创建树集并将每行的点添加到集使用集合的长度返回秩。

    (加10){10}->1

    (加10){10}->1

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

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

        2
  •  1
  •   kscherrer    6 年前

    这可以通过在 getRowIndex 方法(我命名它 getRanking 因为它不再是一个简单的索引)诀窍是存储当前/迭代行的thfr,以便下一行与之进行比较。 如果他们有相同的得分,不要增加排名 是的。

    // class fields
    private TeamHasFormatRecord lastIteratedThfr;
    private int ranking = 0;
    
    private String getRanking(TeamHasFormatRecord thfr)
    {
        // hasSameScore() will check for equal points, mean, and standardDerivation.
        if(lastIteratedThfr == null || !thfr.hasSameScore(lastIteratedThfr)){
            ranking++;
        }
        lastIteratedThfr = thfr; // store this thfr for the next thfr to compare to
        return String.valueOf(ranking);
    }
    

    只有在预先对网格进行排序并且不允许从用户重新排序时,此解决方案才有效我想你已经做了。

    推荐文章