Jak przerwać obliczanie strumienia na podstawie poprzednich wyników? Jeśli jest oczywiste, że stream.filter (...). Count() będzie mniejszy niż pewna liczba - jak zatrzymać obliczanie strumienia?Zatrzymywanie obliczeń strumienia java na podstawie wcześniejszych wyników obliczeń
Mam następujący kod, który sprawdza, czy niektóre sampleData
przechodzi test predicate
:
// sampleData.size() may be greater than 10.000.000
Set<String> sampleData = downloadFromWeb();
return sampleData.stream().filter(predicate::test).count() > sampleData.size() * coefficient;
mogłem tysiące sampleData
. Problem polega na tym, że ten kod jest nieskuteczny. Na przykład, jeśli coefficient
równa 0.5
, sampleData.size() = 10_000_000
, a pierwsze elementy 5_000_000
awarii predicate::test
- nie ma powodu, aby potwierdzić ostatnie 5_000_000
elementy (count() nigdy nie będzie większy niż 5_000_000
).
Dlaczego po prostu użyć pętli for? Java 9 zapewni metodę Stream :: takeWhile, która powinna zrobić to, czego potrzebujesz. – daniu
Chcesz przywrócić wartość true, gdy połowa + 1 ma wartość true AND false, jeśli połowa + 1 ma wartość false? – ByeBye
@ ByeBye Chcę zwrócić dokładną liczbę, jeśli jest większa niż połowa, i zero lub coś innego, jeśli liczba jest mniejsza niż połowa –