按多个字段分组java对象的最佳方法

时间:2015-11-24 15:56:56

标签: java

有一个像这样的对象

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

还有其他(更好)的方法吗?

2 个答案:

答案 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。