https://github.com/yaitskov/j4ts/blob/stream/src/main/java/javaemul/internal/stream/StreamHelper.java

отрим следующий код:

urls.stream()
    .flatMap(url -> fetchDataFromInternet(url).stream())
    .filter(...)
    .findFirst()
    .get();

БудетfetchDataFromInternet вызывать второй URL, когда первого было достаточно?

Я попробовал с меньшим примером, и это похоже на работу, как ожидалось. то есть обрабатывает данные один за другим, но можно ли полагаться на это поведение? Если нет, звонит ли.sequential() до.flatMap(...) Помогите?

    Stream.of("one", "two", "three")
            .flatMap(num -> {
                System.out.println("Processing " + num);
                // return FetchFromInternetForNum(num).data().stream();
                return Stream.of(num);
            })
            .peek(num -> System.out.println("Peek before filter: "+ num))
            .filter(num -> num.length() > 0)
            .peek(num -> System.out.println("Peek after filter: "+ num))
            .forEach(num -> {
                System.out.println("Done " + num);
            });

Выход:

Processing one
Peek before filter: one
Peek after filter: one
Done one
Processing two
Peek before filter: two
Peek after filter: two
Done two
Processing three
Peek before filter: three
Peek after filter: three
Done three

Обновить: Использование официального Oracle JDK8, если это важно для реализации

ОтветНа основании комментариев и ответов ниже, плоская карта частично ленива. Т.е. полностью читает первый поток и только при необходимости он переходит к следующему. Читать поток очень хочется, но читать несколько потоков лениво.

Если это поведение предназначено, API должен позволить функции возвращатьIterable вместо потока.

Другими словами:ссылка

Ответы на вопрос(3)

Ваш ответ на вопрос