在番石榴里有一个等价 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Equivalence.html类专为此类事情而设计。创建您自己的Equivalence
像这样的类:
import com.google.common.base.Equivalence;
import com.google.common.base.Objects;
public class PersonEquivalence extends Equivalence<Person> {
@Override
protected boolean doEquivalent(Person p1, Person p2) {
return Objects.equal(p1.getFistName(), p2.getFistName())
&& Objects.equal(p1.getLastName(), p2.getLastName());
}
@Override
protected int doHash(Person person) {
return Objects.hashCode(person.getFistName(), person.getLastName());
}
}
然后这段代码
Set<Equivalence.Wrapper<Person>> set = Sets.newHashSet();
PersonEquivalence personEquivalence = new PersonEquivalence();
set.add(personEquivalence.wrap(new Person("Joe", "Doe")));
set.add(personEquivalence.wrap(new Person("Joe", "Doe")));
set.add(personEquivalence.wrap(new Person("Jane", "Doe")));
System.out.println(set);
prints
[[email protected] /cdn-cgi/l/email-protection(Person{firstName=Jane, lastName=Doe}),
Pers[email protected] /cdn-cgi/l/email-protection(Person{firstName=Joe, lastName=Doe})]
当然这有点冗长,但是你可以创建转发集 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ForwardingSet.html自动包装和展开Person
是给你的。