我有以下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();
}


如何将其转换为流处理?

谢谢你的帮助!

最佳答案

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

10-06 11:11