Java 如果条件允许,应用过滤器

Java 如果条件允许,应用过滤器,java,Java,如果满足此代码序列的条件(条件:if principal.isAdministrator()),我希望为用户应用/或不应用筛选器 for (User oneUser : subcontractorUserRole.getUsers() .filter(new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor())) .filter(Identity.DELETED, false

如果满足此代码序列的条件(条件:if principal.isAdministrator()),我希望为用户应用/或不应用筛选器

for (User oneUser : subcontractorUserRole.getUsers()
    .filter(new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor()))
    .filter(Identity.DELETED, false))
    users.add(new GenericItem(oneUser.getId(), oneUser.getName()));
我想这样做:

if ( principal.isAdministrator() {
    for ( User oneUser : subcontractorUserRole.getUsers()
        //.filter(new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor()))
        .filter(Identity.DELETED, false))
        users.add(new GenericItem(oneUser.getId(), oneUser.getName()));
} else {
    for ( User oneUser : subcontractorUserRole.getUsers()
        .filter(new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor()))
        .filter(Identity.DELETED, false))
        users.add(new GenericItem(oneUser.getId(), oneUser.getName()));
}
你知道一种不重复循环的优雅方法吗?我可以用其他的Java8

谢谢。

试试这个

subcontractorUserRole.getUsers()
    .stream()
    .filter(i -> principal.isAdministrador() || new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor()))
    .filter(Identity.DELETED, false)
    .forEach(oneUser -> users.add(new GenericItem(oneUser.getId(), oneUser.getName())));

如果您操作复杂的逻辑,最好使用基于谓词的流

Predicate<User> isAdmin = u -> principal.isAdministrator();
Predicate<User> isOTMFpositive = new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor());
Predicate<User> notDeleted = ...
Predicate<User> fullPredicate = isAdmin.or(isOTMFpositive).and(notDeleted);

subcontractorUserRole.getUsers()
    .stream()
    .filter(fullPredicate)
    .map(u -> new GenericItem(u.getId(), u.getName()))
    .collect(collect(Collectors.toList()));
谓词isAdmin=u->principal.isAdministrator();
谓词isOTMFpositive=new OTMFilter(Identity.CompanyEmployeeRel.class,selectedcountry.getsubscriber());
谓词notDeleted=。。。
谓词fullPredicate=isAdmin.or(正)。和(未删除);
subcontractorUserRole.getUsers()
.stream()
.filter(完整谓词)
.map(u->new GenericItem(u.getId(),u.getName())
.collect(collect(collector.toList());

看看战略模式。在本例中,我将创建一个函数来获取
oneUser
,该函数接受bool(isAdmin)并相应地设置过滤器。假设校长是否是管理员没有其他副作用。