如何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 中 惰性 。中间操作没有有效评估,直到终端操作被执行。
我有发送列表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 中 惰性 。中间操作没有有效评估,直到终端操作被执行。