Como agrupar elementos de uma lista por elementos de outra em Java 8

Eu tenho o seguinte problema: Dadas essas classes,

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

class Region {
    private List<String> zipCodes;
    ...
    public List<String> getZipCodes() {
        return zipCodes;
    }
}

usando a API Java 8 Stream, como obtenho umMap<Person, List<Region>> com base em se oRegion contém issoPersonCEP? Em outras palavras, como agrupo as regiões pelas pessoas cujos códigos postais pertencem a essas regiões?

Eu já fiz isso no Java 7 da maneira antiga, mas agora tenho que migrar o código para aproveitar os novos recursos do Java 8.

Obrigado,

Impeto

questionAnswers(5)

yourAnswerToTheQuestion