首页 > 解决方案 > 收集器根据对象的属性创建列表列表

问题描述

我有以下对象:

列出人员

我想创建以下结构

List> 基于姓氏。

我可以使用 groupingBy(p -> p.getFamilyName()) 将它们分组到地图中。但我不想有一张地图,而是一个列表列表。

您可以使用地图的方法 values() 分两步完成。但我想知道你是否可以和收藏家一起做。

标签: javacollectors

解决方案


您可以使用collectingAndThen

ArrayList<List<Person>> collect = stream.collect(
    Collectors.collectingAndThen(Collectors.groupingBy(Person::getFamilyName),
                                 m -> new ArrayList<>(m.values())));

这首先应用groupingBy, “然后”ArrayList为每个分组值创建一个。


推荐阅读