私は、次のことを行うきれいに書かれたコードを見つけるのにいくつかの困難に直面します(次の使用例は単なる例です)。
使用事例:
私には学生がいます。各学生は本のコレクションを持っています。本ごとに、どの学生が持っているかを知る必要があります。本は複数の学生が所有できます。
コード:Set<Student>
入力Map<Book, Set<Student>>
として、出力として作成する必要があります。
ラムダとストリームを使用せずにそれを行う方法を知っていますが、それを使用する方法を学びたいです。
現在、それを達成するために中間の内部クラス(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())));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加