count() operation that
could be optimized.
The following call chains are replaced by this inspection:
Collection.stream().count() → Collection.size(). In Java 8 Collection.stream().count()
actually iterates over the collection elements to count them, while Collection.size() is much faster for most of the collections.Stream.flatMap(Collection::stream).count() → Stream.mapToLong(Collection::size).sum(). Similarly,
there's no need to iterate over all the nested collections. Instead, their sizes could be summed up.Stream.filter(o -> ...).count() > 0 → Stream.anyMatch(o -> ...). Unlike the original call,
anyMatch() may stop the computation as soon as a matching element is found.Stream.filter(o -> ...).count() == 0 → Stream.noneMatch(o -> ...). Similar to the above.
Note that if the replacement involves a short-circuiting operation like anyMatch(), there could be a visible behavior change,
if the intermediate stream operations produce side effects. In general, side effects should be avoided in Stream API calls.