Как я могу преобразовать этот logi c в Java 8 потоков? - PullRequest
0 голосов
/ 05 мая 2020

Пытаюсь выучить Java 8 потоков. Я хочу преобразовать этот код в Java 8 потоков, но я также хочу знать, что делают потоки.

List<Optional<Payment>> filteredPaymentList = new ArrayList<>();

for (Optional<Payment> payment : paymentList) {
        BigDecimal amount = availableToCreditFromNets(payment.get().getId());

        if (BigDecimalUtils.is(amount).isPositive()) {
                filteredPaymentList.add(payment);
        }
}

availableToCreditFromNets возвращает:

public BigDecimal availableToCreditFromNets(Long paymentId) {
    List<NetsTransaction> netsTransactions = this.findAllNetsTransactionsByPaymentIdAndStatus(paymentId, NetsTransactionStatus.OK);
    BigDecimal amount = ZERO_WITH_TWO_DIGITS;
    for (NetsTransaction netsTransaction : netsTransactions) {
        amount = amount.add(netsTransaction.getAmount());

        //Find all credit transactions
        List<NetsTransaction> creditedNetsTransactions = this.findNetsTransactionsByOriginalTransaction(netsTransaction.getId(), NetsTransactionStatus.OK);

        for (NetsTransaction creditedNetsTransaction : creditedNetsTransactions) {
            amount = amount.subtract(creditedNetsTransaction.getAmount().multiply(BigDecimal.valueOf(-1))); //Amount from credit transaction is negative
        }
    }

    if (is(amount).isPositive()) {
        return amount;
    } else {
        return ZERO_WITH_TWO_DIGITS;
    }
}

ZERO_WITH_TWO_DIGITS иметь следующий лог c:

public static final BigDecimal ZERO_WITH_TWO_DIGITS =
                    BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);

1 Ответ

0 голосов
/ 05 мая 2020
            List<Optional<Payment>> filteredPaymentList = paymentList.stream()
                    .filter(payment -> BigDecimalUtils.is(availableToCreditFromNets(payment.get().getId())).isPositive())
                    .collect(Collectors.toList());

Это то, что я пытался сделать.

...