如何在Java 8中按另一个元素对List的元素进行分组

imp*_*eto 7 java collections java-8

我有以下问题:鉴于这些类,

class Person {
    private String zip;
    ...
    public String getZip(){
        return zip;
    }
}

class Region {
    private List<String> zipCodes;
    ...
    public List<String> getZipCodes() {
        return zipCodes;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Java 8 Stream API,如何Map<Person, List<Region>>根据是否Region包含该Person邮政编码获取?换句话说,如何通过邮政编码属于这些区域的人对区域进行分组?

我已经用Java 7老式地完成了它,但现在我必须迁移代码以利用Java 8中的新功能.

谢谢,

英佩特

Lou*_*man 5

我怀疑这是最干净的方式 - 我对发布的其他答案不太满意 - 会

 persons.stream().collect(Collectors.toMap(
    person -> person,
    person -> regions.stream()
       .filter(region -> region.getZipCodes().contains(person.getZip()))
       .collect(Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)