I have this class:
public class StructUserType extends UserType {
MembersList membersList = new MembersList();
public List<Member> getMembers() {
return Collections.unmodifiableList(membersList.members);
}
static class MembersList {
List<Member> members = new ArrayList<>();
}
public static class Member implements Identifiable {
private Integer id;
private String name;
//getters and setters
}
}
And I have a List of object:
List<UserType> userTypes = new ArrayList<>();
I want update Member object which is equal to a certain id. For example, update the name field of member by id. How I can update nested list using stream api?
UPDATE:
I did this:
In class StructUserType I created one method:
void updateMember(Member member) {
membersList.members.stream()
.filter(m -> m.getId().equals(member.getId()))
.findFirst()
.ifPresent(m -> {
m.setName(member.getName());
m.setUserTypeId(member.getUserTypeId());
});
}
Also for external clients created a public method:
public void updateMemberOfStructUserType(StructUserType.Member member) {
userTypes.stream()
.filter(StructUserType.class::isInstance)
.map(StructUserType.class::cast)
.filter(st -> st.getMembers()
.stream()
.anyMatch(m -> m.getId().equals(member.getId())))
.findFirst()
.ifPresent(structUserType -> structUserType.updateMember(member));
}
userTypesand the typeSmbpUserType? What does that have to do withStructUserType? Do you have any code attempts at a streams solution, or any thoughts about how you might code it?List<Member>and that's about it.List<UserType>, UserType containsList<Member>. I want updatememberbyIdof thismember, for example, set newnamefield. I updated my question, how can I made this. But I think, my method not optimal.