簡體   English   中英

使用Java流對集合進行分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM