Vaadin 如何修复网格中的对象集?

Vaadin 如何修复网格中的对象集?,vaadin,vaadin-flow,Vaadin,Vaadin Flow,在我的应用程序中,我有一个类,如: public class Team { private Country teamId; private Set<Player> playerSet; private Set<Player> substitutes; private Set<Coach> coachSet; } 公共类团队{ 私人国家队ID; 专用集播放集; 私有集合替代; 私人教练组; } 当我实例化一个网格时,如: G

在我的应用程序中,我有一个类,如:

public class Team {
    private Country teamId;
    private Set<Player> playerSet;
    private Set<Player> substitutes;
    private Set<Coach> coachSet; 
}
公共类团队{
私人国家队ID;
专用集播放集;
私有集合替代;
私人教练组;
}
当我实例化一个网格时,如:

Grid<Team> grid = new Grid<>(Team.class);
   grid.setItems(team);
   grid.removeAllColumns();
   grid.addColumn(new TextRenderer<>((ItemLabelGenerator<Team>) Team::getCoachName))
           .setHeader("Coach");
   grid.addColumn(new TextRenderer<>((ItemLabelGenerator<Team>) team1 -> team1.getPlayerSet().stream()
           .map(player1 -> player1.getFirstName() + " " + player1.getLastName())
           .collect(Collectors.joining(", "))))
           .setHeader("Players")
           .setFlexGrow(1);
Grid Grid=新网格(Team.class);
并从数据库中设置allTeam(),它显示playerSet和coachSet的对象

我的问题是,我只想显示球员姓名和教练姓名的具体名称,或\n


你知道我该怎么做吗?作为一个初学者,这对我来说很复杂

你可以使用
grid.removeAllColumns()
配置网格中显示哪些列,然后使用
grid.addColumn()
在网格中添加你想要的所有列。在
addColumn()
中,您可以创建一个渲染器,用于定义字段(
coachName
playerSet
)在网格中的显示方式

让我们组建一个班级
团队

public class Team {
    private String coachName;
    private Set<Player> playerSet;
    private Set<Object> objects;
    //getters and setters
}
public class Player {
    private String firstName;
    private String lastName;
    // getters and setters
}
现在你只想在网格中有教练和球员的名字。因此(在我的示例中)对于
coachName
,我们只需使用字段的getter,就可以使用java流轻松地为
playerSet
创建一个逗号分隔的字符串

按如下方式配置网格:

Grid<Team> grid = new Grid<>(Team.class);
   grid.setItems(team);
   grid.removeAllColumns();
   grid.addColumn(new TextRenderer<>((ItemLabelGenerator<Team>) Team::getCoachName))
           .setHeader("Coach");
   grid.addColumn(new TextRenderer<>((ItemLabelGenerator<Team>) team1 -> team1.getPlayerSet().stream()
           .map(player1 -> player1.getFirstName() + " " + player1.getLastName())
           .collect(Collectors.joining(", "))))
           .setHeader("Players")
           .setFlexGrow(1);
grid.setItems(团队);
grid.removeAllColumns();
addColumn(新的TextRenderer((ItemLabelGenerator)团队::getCoachName))
.setHeader(“Coach”);
grid.addColumn(新的TextRenderer((ItemLabelGenerator)team1->team1.getPlayerSet().stream()
.map(player1->player1.getFirstName()+“”+player1.getLastName())
.collect(收集器.连接(“,”))
.setHeader(“玩家”)
.setFlexGrow(1);
结果如下所示:

我看到三种选择

第一个选项是您已经找到的选项:将它们的名称串联在一个字符串中。可以这样做:

grid.addColumn(team -> {
    Set<String> coachNames = new HashSet<>();
    for (Coach coach : team.getCoaches()){
        coachNames.add(coach.getName());
    }
    return String.join(", ", coachNames);
});

可能重复如何设置球员的名字只属于该队的球员?有一个getAllPlayerBYTeamName(字符串s);嗯,这是一个非常不同的问题,但是团队对象应该已经只有该团队中的球员了?如何设置球员名称,只指定属于该团队的球员?有一个getAllPlayerBYTeamName(字符串s);