У меня есть закрытый код void, который сравнивает два класса. В этом типичном коде я хочу иметь возможность использовать / применять лямбда-выражение, где изначально лямбда не используется. Пробовал несколько методов, таких как карты, потоки или фильтры, но, похоже, я не получаю точный формат кода, вот код, который я хочу применить лямбда-выражения. Нужен только этот код
private void checkPrivileges(User user) {
Collection<Role> roles = user.getAllRoles();
List<String> requiredPrivs = new ArrayList<>();
for (Role r : roles) {
if (r.getRole().equals(RoleConstants.SUPERUSER)
&& !Context.hasPrivilege(PrivilegeConstants.ASSIGN_SYSTEM_DEVELOPER_ROLE)) {
throw new APIException("User.you.must.have.role", new Object[] { RoleConstants.SUPERUSER });
}
if (r.getPrivileges() != null) {
for (Privilege p : r.getPrivileges()) {
if (!Context.hasPrivilege(p.getPrivilege())) {
requiredPrivs.add(p.getPrivilege());
}
}
}
}
if (requiredPrivs.size() == 1) {
throw new APIException("User.you.must.have.privilege", new Object[] { requiredPrivs.get(0) });
} else if (requiredPrivs.size() > 1) {
StringBuilder txt = new StringBuilder("You must have the following privileges in order to assign them: ");
for (String s : requiredPrivs) {
txt.append(s).append(", ");
}
throw new APIException(text.substring(0, text.length() - 2));
}
}
Имеет соответствующий класс ролей. java и Привилегия. java. Моя проблема заключается в том, чтобы использовать только лямбда-выражения только в классе void. Вот испытание, которое я сделал, но это была половина моей задачи
role.getPrivileges().stream()
.filter(()->{
return Optional.of(privileges)
.filter(given ->given.p.get privileges())
.getOrElse("privilege required:" +p)});