提问人:Oleg Sandro 提问时间:11/23/2021 最后编辑:Oleg Sandro 更新时间:11/23/2021 访问量:100
如何将 Stream<Person>分组到 Stream<List<Person>>,而不是 Map<String、<List<Person>>?
How can I group Stream<Person> into Stream<List<Person>>, not into Map<String, <List<Person>>?
问:
我有 POJO 类:
@Data
@AllArgsConstructor
public class Person {
private String name;
private String surname;
}
我有一些可执行代码:
public class Main {
public static void main(String[] args) {
Person john1 = new Person("John", "Smith");
Person john2 = new Person("John", "Brown");
Person nancy1 = new Person("Nancy", "James");
Person nancy2 = new Person("Nancy", "Williams");
Person kate1 = new Person("Kate", "Fletcher");
List<Person> persons = List.of(john1, kate1, john2, nancy1, nancy2);
Map<String, List<Person>> result = persons.stream().collect(Collectors.groupingBy(Person::getName));
System.out.println(result);
}
}
我怎样才能进入?并且不需要钥匙。我可以在没有使用地图集合的情况下获得它吗?Stream<List<Person>>
Map<String, List<Person>>
result
UPD:每个列表中都有同名的人
答:
3赞
Nowhere Man
11/23/2021
#1
构建映射后,返回检索到的流:Collection<List<Person>>
Map::values
Stream<List<Person>> stream = persons.stream()
.collect(Collectors.groupingBy(Person::getName))
.values() // Collection<List<Person>>
.stream(); // Stream<List<Person>>
评论
0赞
Oleg Sandro
11/23/2021
谢谢。这很有用。但是,是否有另一种解决方案可以在不使用地图集合的情况下获取具有同名人员的列表流?因为我们有流,接下来我们有集合,最后我们又有了流。我想也许我们可以在不转换为收集的情况下做到这一点
0赞
Nowhere Man
11/23/2021
我们有 ,可以映射到每个列表只包含一个 ,但是这些列表需要以某种方式加入/合并以组合具有相同名称的人,因此需要中间收集和适当的终端操作。Stream<Person>
Stream<List<Person>>
Person
上一个:过滤 Java 嵌套列表
下一个:Java 中的联合流 [已关闭]
评论
result.values()
.stream()