[英]Using Java streams to group a collection
我遇到了一些困難,難以找到能完成以下工作的漂亮書面代碼(以下用例只是一個例子):
用例:
我有學生,每個學生都有一本藏書。 對於每本書,我需要知道哪個學生擁有。 請注意,一本書可以由多個學生擁有。
代碼:我有一個Set<Student>
作為輸入,我需要創建一個Map<Book, Set<Student>>
作為輸出。
我知道如何不使用lambda和流來做到這一點,但我想學習如何使用它。
目前,我已經創建了一個中間內部類(Tuple(Book,Student))來實現它,但是它看起來很臟,我得到了一個Map<Book, Tuple<Book, Student>>
,它不能完全滿足我的需求。
students.parallelStream()
.flatMap(student-> student.getBooks().parallelStream()
.map(book -> new Tuple(book, student)))
.collect(Collectors.groupingBy(tuple-> tuple.book, Collectors.toSet()))
您可以使用Collectors.mapping
在收集期間轉換元組:
Map<Book, Set<Student>> result = students.parallelStream()
.flatMap(student -> student.getBooks()
.parallelStream()
.map(book -> new Tuple(book, student)))
.collect(Collectors.groupingBy(tuple -> tuple.book,
Collectors.mapping(tuple -> tuple.student, Collectors.toSet())));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.