Eu tenho algum código Java que fornece objetos de items
. Limita-os com base no maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Funciona corretamente, mas a pergunta é a seguinte: existe uma maneira de pular o limite quando o maxNumber == 0
?
Eu sei que eu poderia fazer isso:
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());
}
Mas talvez haja uma maneira melhor, alguma coisa vem à sua mente?
java
java-8
java-stream
randomuser1
fonte
fonte
Não, o pipeline de fluxo não permite realmente pular nenhuma parte do pipeline; portanto, você é forçado a trabalhar com lógica condicional dentro das etapas e incluindo o
limit()
sempre no pipeline ou construindo o fluxo em partes que seriam um pouco mais legível (IMHO) do que o if / else na questãoEm um caso simples, como aqui, não faz muita diferença, mas muitas vezes você vê em coleções de código regulares sendo passadas por métodos, convertidas em fluxos e depois voltando a coleções. Nesses casos, pode ser uma idéia melhor trabalhar com fluxos de peças até que você realmente precise
collect()
.fonte