Let's say I've got a list of Strings and I want to filter them by the list of filtering Strings. For the list which consists of: "abcd", "xcfg", "dfbf"
I would precise list of filtering Strings: "a", "b", and after something like filter(i->i.contains(filterStrings) I would like to receive list of "abcd", "dfbf", And for a list of filtering Strings: "c", "f" I would like to reveive list of "xcfg" and "dfbf".
List<String> filteredStrings = filteredStrings.stream() .filter(i -> i.contains("c") || i.contains("f")) //i want to pass a list of filters here .collect(Collectors.toList());
Is there an other way of doing this instead of expanding body of lambda expression and writing a function with a flag which will check every filter?
You should instead be performing a
anyMatch over the list to match from:
List<String> input = Arrays.asList("abcd", "xcfg", "dfbf"); // your input list Set<String> match = new HashSet<>(Arrays.asList("c", "f")); // to match from List<String> filteredStrings = input.stream() .filter(o -> match.stream().anyMatch(o::contains)) .collect(Collectors.toList());