Even in imperative style it can be simplified as follows:
List<ResourcePermissionDTO> permissions = ...;
ResourcePermissionDTO result = null;
for (ResourcePermissionDTO p: permissions) {
if (result == null || isStronger(p.getPermissionType(), result.getPermissionType())) {
result = p;
if (result.getPermissionType() == PermissionType.DENY) break; // (1)
}
}
return result;
If you prefer functional style, you can reproduce exactly the same (though without short-circuit optimization at (1)
) using reduce()
. Guava doesn't support reduce()
, therefore the following example is in Java 8:
return permissions.stream().reduce((result, p) -> {
return isStronger(p.getPermissionType(), result.getPermissionType()) ? p : result;
}).orElse(null);