С Java-9 и выше, вы можете использовать takeWhile
подход как:
int counter = (int) history.stream()
.takeWhile(item -> item.getProfit().compareTo(BigDecimal.ZERO) < 0)
.count();
Для решения Java-8 вы можете посмотреть пользовательскую реализацию takeWhile
, предоставленную в этот ответ . С другой стороны, менее эффективная реализация с использованием indexOf
может состоять в следующем:
int count = history.stream()
.filter(ite -> ite.getProfit().compareTo(BigDecimal.ZERO) >= 0)
.findFirst()
.map(history::indexOf)
.orElse(history.size());
Поскольку Хольгер предложил улучшить вышеуказанное решение, вы можете использовать IntStream
с findFirst
:
int count = IntStream.range(0, history.size())
.filter(ix -> history.get(ix).getProfit() .compareTo(BigDecimal.ZERO) >= 0)
.findFirst()
.orElse(history.size());