Reputation: 273
I need to filter condition by firstname and lastname in the List of names present in either official or unOfficial names List and return List of EmployeeDetails. Below are the pojo classes
public class EmployeeDetails {
private NameDetails nameDetails;
public NameDetails getNameDetails() {
return nameDetails;
}
public void setNameDetails(NameDetails nameDetails) {
this.nameDetails = nameDetails;
}
}
public class NameDetails {
private List<Name> officalName;
private List<Name> unOfficialName;
public List<Name> getOfficalName() {
return officalName;
}
public void setOfficalName(List<Name> offiicalName) {
this.officalName = offiicalName;
}
public List<Name> getUnOfficialName() {
return unOfficialName;
}
public void setUnOfficialName(List<Name> unOfficialName) {
this.unOfficialName = unOfficialName;
}
}
public class Name {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
I tried for filtering with list of officialNames and it is working fine,but I also want to filter names present in unOfficial Names also.(OR Condition)
return employeeDetailList.stream().filter(employeeDetails->(employeeDetails.getNameDetails().getOffiicalName()).stream()
.anyMatch(name-> (null!=name) && (firstName).equals(name.getFirstName()) && (lastName).equals(name.getLastName())))
.collect(Collectors.toList());
Help me to solve the issue.Thanks
Upvotes: 2
Views: 763
Reputation: 120858
If you can't override equals/hashCode
(if you could there would be a faster way), then:
employeeDetailList
.stream()
.filter(x -> Stream.concat(
x.getNameDetails().getOfficalName().stream(),
x.getNameDetails().getUnOfficialName().stream()
)
.anyMatch(y -> Objects.equals(y.getFirstName(), firstName) &&
Objects.equals(y.getLastName(), lastName)))
.collect(Collectors.toList());
Upvotes: 2
Reputation: 3752
Just add the OR condition:
return employeeDetailList.stream().filter(employeeDetails->
((employeeDetails.getNameDetails().getOffiicalName()).stream().anyMatch(name-> (null!=name) && (firstName).equals(name.getFirstName()) && (lastName).equals(name.getLastName()))))
|| ((employeeDetails.getNameDetails().getUnOfficialName()).stream().anyMatch(name-> (null!=name) && (firstName).equals(name.getFirstName()) && (lastName).equals(name.getLastName()))))
.collect(Collectors.toList());
Upvotes: 0