相关疑难解决方法(0)

flatMap是否保证是懒惰的?

请考虑以下代码:

urls.stream()
    .flatMap(url -> fetchDataFromInternet(url).stream())
    .filter(...)
    .findFirst()
    .get();
Run Code Online (Sandbox Code Playgroud)

fetchDataFromInternet当第一个足够的时候会被叫第二个网址吗?

我尝试了一个较小的例子,看起来像预期的那样工作.即逐个处理数据但是可以依赖这种行为吗?如果没有,请.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);
            });
Run Code Online (Sandbox Code Playgroud)

输出:

Processing one
Peek before filter: one
Peek after filter: one
Done one
Processing two
Peek before filter: two
Peek after filter: …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream flatmap

11
推荐指数
2
解决办法
1304
查看次数

标签 统计

flatmap ×1

java ×1

java-8 ×1

java-stream ×1