首页 > 解决方案 > 通过另一个对象访问对象

问题描述

我有三个类:UserUserCategoryPatientCase

现在,在某些方法中,我需要检查类别或案例是否属于当前登录的用户。

用户:

private Long id;
private String firstName;
private String lastName;
private String emailAddress;
private String password;
private Set<UserCategory> userCategories;

用户类别:

private Long id;
private String name;
private User user;
private Set<PatientCase> cases;

患者案例:

private Long id;
private String caseTitle;
private LocalDate caseDate;
private Set<UserCategory> userCategories;

现在给定一个用户和一个类别,我可以通过执行此操作来检查该类别是否属于该用户(在这种情况下,我所做的不属于该用户):

private boolean checkIfCategoryDoesNotBelongToUser(UserCategory category, User user) {
    return !category.getUser().getId().equals(user.getId());
}

问题是我如何判断PatientCase该用户是否属于该用户。而且我不允许在课程中添加任何其他字段。我正在考虑做类似的事情:

private boolean checkIfCaseDoesNotBelongToUser(PatientCase patientCase, User user) {
    return !patientCase.getUserCategories()
            .stream()
            .filter(c -> c.getUser().getId().equals(user.getId()))
            .

另外我知道过滤器实际上并没有返回布尔值,所以也许,noneMatch. 但不是很确定。

基本上,一个患者病例可以属于多个类别。一个用户可以有多个类别。请提出一些建议。

标签: java

解决方案


您确实可以使用noneMatch

private boolean checkIfCaseDoesNotBelongToUser(PatientCase patientCase, User user) {
    return patientCase.getUserCategories()
        .stream()
        .noneMatch(c -> c.getUser().getId().equals(user.getId()));
}

noneMatch是短路的,所以false一旦找到匹配项就会返回。


另外,我建议你不要用否定来命名你的方法,所以我宁愿写一个checkIfCaseBelongToUser(use anyMatch!) 并让调用者使用!它来否定它。


推荐阅读