Good morning. Currently I have the following java class of which I have a list of identities:
@Getter
@AllArgsConstructor
@RegisterForReflection
@NoArgsConstructor
@Setter
public class Identity {
private String type;
private String id;
@JsonIgnore
private String account;
private List<String> services;
private List<String> roles;
}
Currently I have a List of Identity (List <Identity>
) and I need to search within this list for some or all of its parameters, that is, I can have the following use cases for searching for an identity within the list:
1. type && id;
2. type && id && services;
3. type && id && services && roles;
How can I do in this case? I know that lists have methods like contains, but I don't know if they apply to partial searches like I want, what I want is that if it makes a match it returns the element
If I understand your question, you need something like this:
public Identity findIdentity(List<Identity> identities, String type, String id, List<String> services, List<String> roles) {
return identities.stream()
.filter(identity -> isCorrectIdentity(type, id, services, roles, identity))
.findFirst()
.orElse(null);
}
private boolean isCorrectIdentity(String type, String id, List<String> services, List<String> roles, Identity identity) {
return identity.getType().equals(type) && identity.getId().equals(id) &&
(services == null || new HashSet<>(identity.getServices()).containsAll(services)) &&
(roles == null || new HashSet<>(identity.getRoles()).containsAll(roles));
}
This will loop over your list, check element by element the type and id and if the services are defined it will check also with services and in the end if the roles are defined it will search by roles.
Note: you can simplify the isCorrectIdentity
by using multiple if elses
or multiples methods
.