首页 > 解决方案 > 如何在 Java 流处理中存储中间状态

问题描述

我有以下Java循环:

for (final Long orderNumber : availableOrderIds) {
    final List<ReservationDetailResponse> reservations = tryToReserve(orderNumber);
    if (successful(reservations)) {
        return withReservationIdFrom(reservations);
    }
}

和方法:

private boolean successful(final List<ReservationDetailResponse> reservations) {
    return !reservations.isEmpty();
}
private Long withReservationIdFrom(final List<ReservationDetailResponse> reservations) {
    return reservations.get(0).getReservationId();
} 

如何将其转换为流处理?

谢谢你的帮助!

标签: javafunctional-programmingjava-stream

解决方案


用于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);

推荐阅读