如何在Java流处理中存储中间状态

如何在Java流处理中存储中间状态,java,functional-programming,java-stream,Java,Functional Programming,Java Stream,我有以下Java循环: for(最终长订单号:availableOrderIds){ 最终列表保留=tryToReserve(订单号); 如果(成功(预订)){ 从(预订)返回带有预订的数据; } } 方法: private boolean成功(最终列表保留){ return!reservations.isEmpty(); } private Long with reservation from(最终列表预订){ 返回reservations.get(0.getReservationId()

我有以下Java循环:

for(最终长订单号:availableOrderIds){
最终列表保留=tryToReserve(订单号);
如果(成功(预订)){
从(预订)返回带有预订的数据;
}
}
方法:

private boolean成功(最终列表保留){
return!reservations.isEmpty();
}
private Long with reservation from(最终列表预订){
返回reservations.get(0.getReservationId();
} 
如何将其转换为流处理


谢谢你的帮助

使用
map
进行转换,
filter
进行条件过滤,
findFirst
可以执行以下操作:

return availableOrderIds.stream()
        .map(this::tryToReserve)
        .filter(this::successful)
        .findFirst()
        .map(this::withReservationIdFrom)
        .orElse(0L); // assumed as default value
此外,如果提供了实用程序,您还可以将它们包括在操作中:

return availableOrderIds.stream()
        .map(this::tryToReserve)
        .filter(res -> !res.isEmpty())
        .findFirst()
        .map(res -> res.get(0).getReservationId())
        .orElse(0L);

使用
map
进行转换,
filter
进行条件过滤,
findFirst
可以执行以下操作:

return availableOrderIds.stream()
        .map(this::tryToReserve)
        .filter(this::successful)
        .findFirst()
        .map(this::withReservationIdFrom)
        .orElse(0L); // assumed as default value
此外,如果提供了实用程序,您还可以将它们包括在操作中:

return availableOrderIds.stream()
        .map(this::tryToReserve)
        .filter(res -> !res.isEmpty())
        .findFirst()
        .map(res -> res.get(0).getReservationId())
        .orElse(0L);

大致如下:

availableOrderIds.stream()
   .map(orderNumber -> tryToReserve(orderNumber))
   .filter(reservation -> successful(reservation))
   .map(reservations -> withReservationIdFrom(reservations))
   .findFirst()
   .get();

大致如下:

availableOrderIds.stream()
   .map(orderNumber -> tryToReserve(orderNumber))
   .filter(reservation -> successful(reservation))
   .map(reservations -> withReservationIdFrom(reservations))
   .findFirst()
   .get();