有一个像这样的对象
public class Person {
private String id;
private String firstName;
private String lastName;
private Float weight;
private Date birthday;
private String address;
.....
需要按5个字段(firstName,lastName,weight,birthday,address)分组人员列表
Map<String, List<Person>> groupedPersons = ...
有一个解决方案,通过番石榴等效:
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Equivalence.html
还有其他(更好)的方法吗?
答案 0 :(得分:0)
我将使用hashCode()方法:
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
result = 31 * result + (weight != null ? weight.hashCode() : 0);
result = 31 * result + (birthday != null ? birthday.hashCode() : 0);
result = 31 * result + (address != null ? address.hashCode() : 0);
return result;
}
然后使用地图:HashMap&gt; groupPersons ......
答案 1 :(得分:0)
有两种方法需要覆盖类以使该类的对象作为哈希映射键工作:
public int hashCode();
public boolean equals(Object o);
然后,您可以使用HashMap来区分组值
如果地图以前包含该键的映射,则旧值将替换为HashMap.put(K key, V value)
。
Eclipse可以自动生成和覆盖API。