Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.42!gegeweb.eu!nntpfeed.proxad.net!proxad.net!feeder1-2.proxad.net!74.125.46.80.MISMATCH!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail From: Sean Mitchell Newsgroups: comp.lang.java.programmer Subject: equals(), Sets, Maps, and degrees of equality Date: Wed, 9 Nov 2011 18:33:02 -0800 (PST) Organization: http://groups.google.com Lines: 21 Message-ID: <24123649.762.1320892382934.JavaMail.geo-discussion-forums@vbmh5> Reply-To: comp.lang.java.programmer@googlegroups.com NNTP-Posting-Host: 99.249.53.189 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Trace: posting.google.com 1320892383 7757 127.0.0.1 (10 Nov 2011 02:33:03 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 10 Nov 2011 02:33:03 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=99.249.53.189; posting-account=KyV8pgoAAABM5yN2OLGSlQqU5T4kClVW User-Agent: G2/1.0 X-Google-Web-Client: true Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:9813 Anyone ever run into the case where you wish an Object could have more than one equals(), or that Set and Map implementations would let you pass in something like a closure to determine key equality? It seems to me that objects can be equal in varying degrees. Let's consider a class Dog: public class Dog { String breed; String name; String age; } I may want to have a Set, which holds only one Dog of each breed, irrespective of name of age. In this case my equals()/hashcode() would only consider breed. But I may also want a Mag in which each Dog is made unique by name. And of course, there is the most intuitive case where I want to use equals() to see if the instances map on all three fields. I suppose I could create a wrapper class for each purpose which only overrides equals() and hashcode(), but that seems very unsatisfying and inefficient. I'm interested in how other people have dealt with this. Surprisingly, I have not been able to Google up much on this subject. Thoughts?