pankaj_ar
pankaj_ar

Reputation: 765

Merge and sort multiple Streams java 8

I have multiple streams of Student Object. I have to merge them in sorted order.

class Student {
    private String branch;
    private Integer rollNo;
    private Date doj;
    // Getters and Setters
}

In another class, I have a method

private Stream<Student> mergeAndSort(Stream<Student> s1, Stream<Student> s2, Stream<Student> s3) {
    return Stream.of(s1, s2, s3).sorted(...
        // I tried this logic multiple times but is not working. How can I inject Student comparator here.
        // I have to sort based on branch and then rollNo.
    );
}

Upvotes: 4

Views: 3164

Answers (1)

Eran
Eran

Reputation: 393841

Stream.of(s1, s2, s3) gives you a Stream<Stream<Student>>. In order to get a Stream<Student>, use flatMap:

Stream.of(s1, s2, s3).flatMap(Function.identity()).sorted(...)...

To sort according to the required properties:

return Stream.of(s1, s2, s3)
             .flatMap(Function.identity())
             .sorted(Comparator.comparing(Student::getBranch).thenComparing(Student::getRollNo));

Upvotes: 7

Related Questions