I have been trying to adapt this approach to reduce my predicates into one filter.
Class definition:
@Command(name = "Devices", description = "Fetch Devices from SecureTrack", subcommands = {InterfaceCommand.class})
class TufinDevices implements Runnable {
.
.
.
private void filter(TufinDeviceCollection<TufinDevice> devices) {
List<Predicate<? super TufinDevice>> filters = new ArrayList();
if (modelContains != null) {
System.out.println("modelContains " + Arrays.asList(deviceID));
Predicate< ? super TufinDevice> deviceFilter = device -> Arrays.stream(modelContains)
.allMatch(input -> device.getModel().toLowerCase().contains(input.toLowerCase()));
filters.add(deviceFilter);
}
if (hostNameContains != null) {
Predicate<TufinDevice> deviceFilter = device -> Arrays.stream(hostNameContains)
.allMatch(input -> device.getHostName().toLowerCase().contains(input.toLowerCase()));
filters.add(deviceFilter);
}
devices.stream().filter(filters.stream().reduce(Predicate::or).orElse(t->true));
}
I do not understand how this line of code is supposed to work.
devices.stream().filter(filters.stream().reduce(Predicate::or).orElse(t->true));
How does that line need to be implemented in order to work. Its complaining that
Predicate<CAP1> can't be converted to Predicate<? super CAP2>