如何return void in stream?

How to return void in stream?

我有发送列表orders.It当参数的方法名称相同时增加

但它不起作用。因为它还没有终止操作

List<SendingOrdres> sendingOrders = new ArrayList<SendingOrdres>();

private void countUpOrResetSendingOrders(String method) {
    sendingOrders.stream()
                 .filter((e) -> {
                     System.out.println("filter:"+e);
                     return e.getMethod().equals(method);
                 })
                 .peek((e) -> System.out.println("peek:"+e)) //For check
                 .map((e)->{
                     int nextNowSendingOrder = e.getNowSendingOrder()+1;
                     if(nextNowSendingOrder > e.getMaxSendingOrder()) {
                         e.setNowSendingOrder(0);
                     }else {
                         e.setNowSendingOrder(nextNowSendingOrder);
                     }
                     return e;
                 });
                 // no Termination operation
}

我在上面的代码中添加了终止操作。它运行良好。

.collect(Collectors.toList()); 

我有 question.I 不需要 return 值。所以我想 return void.
但是如果没有终止操作,则 Stream 不工作。 如何return void in stream?

Stream 由两个必选(采购、终端)部分和一个可选(中间)部分组成。

流媒体:

  • 是通过 sourcing 操作生成的(创建 Stream<T> 实例的东西);
  • 然后可以选择继续一个或多个链接的 中间操作 ;
  • 最终以终端操作终止。

void 只能被认为是 终端操作 的 return 类型(因此,其 lambda(或方法引用)表达式)在流中,因为每个中间操作 必须 return 流,随后的中间(或终端)操作将在该流上运行。

例如:

List.of(1, 2, 3, 4)
    .stream() //sourcing the stream
    .forEach(System.out::println); //terminating the stream

没问题,因为 println 只消耗流,不需要 return 另一个流。


List.of(1, 2, 3, 4)
    .stream() //sourcing the stream
    .filter(System.out::println); //ouch..

但是,不编译。


此外,请注意,Stream API 在 Java 中 惰性 。中间操作没有有效评估,直到终端操作被执行。