java - 如何在 Java 8 中按另一个列表的元素对列表的元素进行分组

标签 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;
    }
}

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

我已在 Java 7 中以老式方式完成此操作,但现在我必须迁移代码以利用 Java 8 中的新功能。

谢谢,

动力

最佳答案

我怀疑最简洁的方法是——我对发布的其他答案不太满意——是

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

关于java - 如何在 Java 8 中按另一个列表的元素对列表的元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245142/

相关文章:

java - 部署的 Tomcat 6 webapp 无法连接到 Amazon RDS Oracle 实例

java8 一个 map 列表,按键减少

java - 如何将函数引用传递到我的方法中并使用它们?

Java如何在修改集合时对其进行分区

java - 日历之类的调度库java

Java-如何将黑白图像加载到二进制中?

java - 这是什么引用?

java - <E extends Number> List< 是什么意思? super E> java中方法的返回类型

java - String IdentityHashMap 与 HashMap 性能对比

c# - IEnumerable<T> 与 T[]