Java 如果条件允许,应用过滤器
如果满足此代码序列的条件(条件:if principal.isAdministrator()),我希望为用户应用/或不应用筛选器Java 如果条件允许,应用过滤器,java,Java,如果满足此代码序列的条件(条件:if principal.isAdministrator()),我希望为用户应用/或不应用筛选器 for (User oneUser : subcontractorUserRole.getUsers() .filter(new OTMFilter(Identity.CompanyEmployeeRel.class, selectedCounty.getSubcontractor())) .filter(Identity.DELETED, false
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)并相应地设置过滤器。假设校长是否是管理员没有其他副作用。