Kopia obiektu - modyfikacje, deep cloning

0

Mam do Was pytanie. Mam set obiektów: rolePrivilegeSet (zestaw przywilejów dla danej roli), encja klasa RolePrivilege wygląda tak mniej więcej:

@ManyToOne
@JoinColumn(name = "role_id")
private Role role;

@ManyToOne
@JoinColumn(name = "privilege_id")
private Privilege privilege;

@Column(columnDefinition = "BOOLEAN NOT NULL DEFAULT FALSE")
@Builder.Default
private Boolean read = FALSE;  

etc.

Chcę stworzyć kopię(klona) tej kolekcji rolProvilegeSet i podmienić tylko rolę na inną. Dziwne rzeczy się dzieją, jakieś z konkruencją,
Jak to zrobić najbardziej profesjonalnie? Pomożecie?


Coś takiego mam na tę chwilę:

public Set<RolePrivilege> clone (Set<RolePrivilege> rolePrivilegeSet, Role role) {
    Set<RolePrivilege> rolePrivileges = rolePrivilegeSet;
    for (RolePrivilege rolePrivilege: rolePrivileges){
    rolePrivilege.setRole(role);
    rolePrivileges.add(rolePrivilege);
    }
    return rolePrivileges;
}
2

Dziwne rzeczy się dzieją, jakieś z konkruencją

Po prostu na rynku Java koderów jest coraz większa konkurencja :)

Nie możesz modyfikować kolekcji, po której iterujesz. Gdzie tu jest jakiekolwiek klonowanie, bo nie widzę?

0

Nie ma jeszcze. Jakbyś to Charles zrobił? nie wiem jakby to Charles zrobił, ale zrób po prostu nowego seta i do niego wrzuć te elementy?

1

Klonowanie encji JPA ... ja tego nie widzę.
Przypuszczam, że w prostych przypadkach 100% działa, ale ...

0

public RolePrivilege changeWith(RolePrivilege rolePrivilege, Role role){
rolePrivilege.setRole(role);
return rolePrivilege;
}
Set<RolePrivilege> results = rolePrivilegeSet.stream().map(s -> s.changeWith(s,role)).collect(Collectors.toSet());

1

Jeśli już, to peek(), a nie map(). Poza tym trochę pokraczne to rozwiązanie, wołasz metodę na obiekcie przekazując ten sam obiekt jako parametr?

0

@Charles_Ray: Dzięki. Masz rację, że pokracznie. Naprawdę się zgadzam. A jak to zrobić niepokracznie?

0

Ale w czym tkwi problem? Musisz zrobić przez new nowa kolekcje i wrzucić do niej elementy pętlą albo przez addAll.

0

@Charles_Ray: Już wiem. Nieaktualne pytanie ;), ale mega dzięki za wskazówki.

0

@Charles_Ray: W sumie trochę przerost formy nad treścią. Jakoś lubię streamy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1