Mam trochę kodu Java, który zapewnia obiekty z items
. Ogranicza je na podstawie maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Działa poprawnie, ale pytanie brzmi: Czy istnieje sposób na ominięcie ograniczenia, gdy maxNumber == 0
?
Wiem, że mógłbym to zrobić:
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());
}
Ale może jest lepszy sposób, czy coś ci przychodzi na myśl?
java
java-8
java-stream
randomuser1
źródło
źródło
Nie, rurociąg strumień nie pozwala właściwie pominąć wokół żadnej części rurociągu, więc jesteś zmuszony do pracy albo warunkowego logiki wewnątrz schodach i w tym
limit()
zawsze w rurociągu lub budowy strumienia w częściach, które byłyby nieco bardziej czytelny (IMHO) niż pytanie / jeśli w pytaniuW prostym przypadku, takim jak tutaj, nie robi to dużej różnicy, ale często widzisz, że zwykłe kolekcje kodu są przekazywane metodami, konwertowane na strumienie, a następnie z powrotem do kolekcji. W takich przypadkach lepszym pomysłem może być praca ze strumieniami w częściach, dopóki naprawdę nie będzie to konieczne
collect()
.źródło