2

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>
CoupFlu
  • 311
  • 4
  • 20

0 Answers0