Using stream of streams and flatmapping it to concat multiple streams

Transcribed from the original LinkedIn image post.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

class Day22 {
    public static void main(String[] args) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        List<String> publicHolidaysOfBD = List.of("16/02/2021", "21/02/2021", "14/04/2021", "17/03/2021");
        List<String> publicHolidaysOfUS = List.of("01/01/2021", "17/03/2021", "04/07/2021", "14/02/2021");
        List<String> publicHolidaysOfCA = List.of("01/01/2021", "20/04/2021", "01/07/2021", "17/03/2021");

        Stream<Stream<String>> streamConcat = Stream.of(
            publicHolidaysOfCA.stream(),
            publicHolidaysOfBD.stream(),
            publicHolidaysOfUS.stream()
        );

        streamConcat
            .flatMap(Function.identity())
            .map(convertToLocalDate(dateTimeFormatter))
            .forEach(System.out::println);
    }

    static Function<String, LocalDate> convertToLocalDate(DateTimeFormatter dateTimeFormatter) {
        return (date -> LocalDate.parse(date, dateTimeFormatter));
    }
}

The original LinkedIn graphic is preserved below.

Day 22 LinkedIn post