use*_*888 -1 java grouping java-8 java-stream
我的 groupingBy 方法有问题。我举个例子:假设有一个List<Person>wherePerson.class和City.classare like this
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
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);
    }
}
| 归档时间: | 
 | 
| 查看次数: | 2575 次 | 
| 最近记录: |