java-8 - 具有值映射函数生成列表的java 8列表分组

标签 java-8 grouping java-stream flatten

我有一个跟随 Person

public class Person {

    public String name;

    public List<Brand> brands;

    //Getters
}

和一个List<Person> persons (可能具有相同的名称)。我需要在 <String, List<Brand>> 的 map 中分组与人的 name作为键和累积列表 Brands作为值(value)观。

像这样

 Map<String, List<List<String>>> collect = list.stream().collect(
        groupingBy(Person::getName, mapping(Person::getBrands, toList()))
 );

产生了不希望的结果,我知道为什么。如果在分组过程中这些值可以以某种方式变平?有没有办法用 Streams api 就可以做到这一点?

最佳答案

java 9 将添加 flatMapping专门针对此类任务的收集器:

list.stream().collect(
    groupingBy(
        Person::getName, 
        flatMapping(
            p -> p.getBrands().stream(), 
            toList()
        )
    )

关于java-8 - 具有值映射函数生成列表的java 8列表分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083939/

相关文章:

java - 在 List 中转换/分组值

java - 使用流将对象列表转换为从 toString 方法获取的字符串

Java8 嵌套流用 setter 写回

java - 创建一个自定义的类 IntStream 类

sorting - SAPUI5 表 - 删除过滤器/分组/排序?

lambda - 在Java 8中,当我使用stream()和filter()时,我可以保留与主对象相关的对象(而不是对象本身)吗?

java - "Bad Form"是用Java Stream发送邮件的map函数吗?

php - SQL 查询分组不正确

r - R 中的分组和聚合

java - Stream.forEach 是否尊重顺序流的相遇顺序?