My function finds if from a list of given words at list one word is valid in the page. So when page contains words I have written it as follows: (Simplified version)
private boolean atLeastOneWordIsValidInThePage(Page page, Set<Long> wordIdsToCheck)
Set<Long> wordIds = page.getWords().stream()
.filter(word -> word.isValid())
.map(word->getWordId())
.collect(Collectors.toSet());
return words.stream().anyMatch((o) -> wordIds.contains(o));
Is it the best java 8 practice to write it?
I want to stop searching when the first match is found.
The containsAll() method of List interface in Java is used to check if this List contains all of the elements in the specified Collection. So basically it is used to check if a List contains a set of elements or not.
One of the utility method filter() helps to filter the stream elements that satisfy the provided criteria. The predicate is a functional interface that takes a single element as an argument and evaluates it against a specified condition.
There is no need to open two separate streams. You should be able to chain anyMatch
directly to the map
function as follows :
return page.getWords().stream()
.filter(word -> word.isValid())
.map(word->getWordId())
.anyMatch((o) -> words.contains(o));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With