У меня есть некоторый код Java, который предоставляет объекты из items
. Это ограничивает их на основе maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Это работает правильно, но вопрос в следующем: есть ли способ пропустить ограничение, когда maxNumber == 0
?
Я знаю, что мог сделать это:
if (maxNumber == 0) {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.collect(Collectors.toList());
} else {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
}
Но, может быть, есть лучший способ, что-нибудь приходит на ум?
источник
Нет, потоковый конвейер не позволяет фактически пропускать какую-либо часть конвейера, поэтому вы вынуждены работать либо с условной логикой внутри шагов, включая
limit()
всегда в конвейере, либо строить поток по частям, которые будут чуть более разборчиво (ИМХО), чем в вопросе if / elseВ таком простом случае, как здесь, это не имеет большого значения, но вы часто видите, как обычные коллекции кода передаются через методы, преобразуются в потоки, а затем обратно в коллекции. В таких случаях было бы лучше поработать с потоками по частям, пока вам это не понадобится
collect()
.источник