代码之家  ›  专栏  ›  技术社区  ›  e2rabi

使用peek和findAny对Java流结果感到困惑

  •  4
  • e2rabi  · 技术社区  · 5 年前

    我不熟悉Java的流API,我对这个案例的结果感到困惑:

    Stream<String> stream = Stream.of("A","B","C","D");
    System.out.println(stream.peek(System.out::println).findAny().get());
    

    这张照片是:

    A
    A
    

    A
    A
    B
    B
    C
    C
    D
    D
    
    1 回复  |  直到 5 年前
        1
  •  9
  •   Community Dai    4 年前

    这个 findAny method 没有找到所有的元素;它只找到一个元素。

    Optional 描述流的某些元素或空

    这是一种短路终端操作。

    在本例中,在调用终端方法之前不会处理流, 芬丹 peek method

    findFirst count() ),则不会为这些元素调用该操作。

    这个 方法是短路,所以 窥视 的操作将仅对找到的元素调用 芬丹 .

    这就是为什么你只得到两个 A 窥视 方法,然后打印第二个,即 可选择的 退回 .