Как можно упростить postConstruct() что бы был один Set?
@Component
public class UserInit {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
public UserInit(UserService userService, PasswordEncoder passwordEncoder) {
this.userService = userService;
this.passwordEncoder = passwordEncoder;
}
@PostConstruct
private void postConstruct() {
List<User> users = userService.getAllUsers();
if (users.isEmpty()) {
Role admin = new Role("ROLE_ADMIN");
Role user = new Role("ROLE_USER");
Set<Role> adminRole = new HashSet<>();
Set<Role> userRole = new HashSet<>();
Set<Role> anyRole = new HashSet<>();
adminRole.add(admin);
userRole.add(user);
anyRole.add(admin);
anyRole.add(user);
userService.createUser(new User("admin",
passwordEncoder.encode("admin"),
"Admin", (byte) 30, "[email protected]", adminRole));
userService.createUser(new User("user",
passwordEncoder.encode("user"),
"User", (byte) 20, "[email protected]", userRole));
}
}
}
Ответы (1 шт):
Если Вам нужны унивальные наборы ролей, то проще будет совсем избежать создания временных переменных
Set<Role> adminRole = new HashSet<>();
Set<Role> userRole = new HashSet<>();
Set<Role> anyRole = new HashSet<>();
А передавать в метод создания пользователя инициализованный в одну строку набор ролей
Примеры инициализации Set
Можно передать в конструктор список, созданный "на лету" с помощью утилитарного класса Arrays
new HashSet<>(Arrays.asList(admin, user))
Java 8. Streams
В 8ой версии можно воспользоваться стримами
Stream.of(admin, user).collect(Collectors.toCollection(HashSet::new))
Java 9
В 9ой версии можно воспользоваться методом of() с помощью которого можно инициализировать Set
В результате вы получите немодифицируемый набор
Set.of(admin, user)
Java 10. Streams
В 10ой версии можно воспользоваться стримами для получения немодифицируемого набора
Stream.of(admin, user).collect(Collectors.toUnmodifiableSet())
Итог
Ну и в коде получится так:
(использовал дефолтную версию, т.к. не знаю какая у вас версия Java, можете заменить на то, что вам больше нравится...у себя бы я для 9ой версии использовал)
@Component
public class UserInit {
private final UserService userService;
private final PasswordEncoder passwordEncoder;
public UserInit(UserService userService, PasswordEncoder passwordEncoder) {
this.userService = userService;
this.passwordEncoder = passwordEncoder;
}
@PostConstruct
private void postConstruct() {
List<User> users = userService.getAllUsers();
if (users.isEmpty()) {
Role admin = new Role("ROLE_ADMIN");
Role user = new Role("ROLE_USER");
userService.createUser(new User("admin",
passwordEncoder.encode("admin"),
"Admin", (byte) 30, "[email protected]", new HashSet<>(Arrays.asList(admin))));
userService.createUser(new User("user",
passwordEncoder.encode("user"),
"User", (byte) 20, "[email protected]", new HashSet<>(Arrays.asList(user))));
}
}
}