Search code examples
javalambdafunctional-programmingjava-stream

Java Stream : How to filter conditionally?


I have the following stream statement with Java Stream and I filter records based on the typeId values as types.getIds().contains(x.getType().getId()):

return petRepository.findAll().stream()
                .filter(x -> types.getIds().contains(x.getType().getId()))
                .collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));

However, I want to fetch all values when types.getIds().size() == 0 and tried something as shpon below:

.filter(types.getIds().size() > 0 ? x -> types.getIds().contains(x.getType().getId()) : <NO FILTERING>)

So, how can I skip filtering when types.getIds().size() == 0 ?


Solution

  • How about

    return petRepository.findAll().stream()
                .filter(x -> types.getIds().isEmpty() ||
                             types.getIds().contains(x.getType().getId()))
                .collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));