我遇到了groupingBy方法的问题。
我用一个例子:
假设List<Person>
Person.class
和City.class
就像这样
class Person{
String name;
String surname;
City city;
}
class City{
String name;
String postalCode;
}
我会按city.postalcode
对列表进行分组,并执行以下操作:
List<Person> myList = ...some persons here...
Map<City,List<Person>> groupMap = myList.stream().collect(
Collectors.groupingBy(person -> person));
显然这不起作用,因为groupingBy
不知道如何按对象分组。
我会做类似Collectors.groupingBy(person -> person.city.postalcode)
之类的事情,但是这会产生Map<String,List<Person>>
而不是Map<City,List<Person>>
感谢您的帮助。
更新
要在某个类上使用groupingBy
,必须正确实现equals
和hashcode
答案 0 :(得分:2)
Collectors.groupingBy(person -> person)
Collectors.groupingBy(person -> person.city.postalcode)
你想按城市分组吗?不要按人或邮政编码分组。正如您所说,按城市分组。
Collectors.groupingBy(person -> person.city)
正如您在问题中所述,City
应覆盖equals
和hashCode
。
class City {
String name;
String postalCode;
@Override public boolean equals(Object obj) {
if (!(obj instanceof City)) {
return false;
}
City that = (City) obj;
return Objects.equals(this.name, that.name)
&& Objects.equals(this.postalCode, that.postalCode)
}
@Override public int hashCode() {
return Objects.hash(name, postalCode);
}
}