Поскольку вы не можете переопределить equals()
, я могу думать о следующем:
Создайте обертку вокруг Name
, которая переопределяет equals()
и hashCode()
для Name.getMotherName()
:
public class NameWrapper {
private final Name name;
public NameWrapper(Name name) {
this.name = name;
}
@Override
public int hashcode() {
return name.getMotherName().hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj == this) return true;
if(!(obj instanceof NameWrapper)) return false;
NameWrapper other = (NameWrapper) obj;
return name.getMotherName().equals(other.name.getMotherName());
}
}
Затем вы можете сопоставить Person#getName()
с NameWrapper
и сгруппировать по этому:
Map<NameWrapper, List<Person>> group = persons.stream()
.collect(Collectors.groupingBy(p -> new NameWrapper(p.getName())));