gpt4 book ai didi

java - 在 Lambda 表达式中组合谓词

转载 作者:行者123 更新时间:2023-11-30 01:47:35 25 4
gpt4 key购买 nike

这是一个由两部分组成的问题。

我有一个 boolean 字段和几个 String[] 字段,我需要评估每个字段的谓词。

以下代码获取每个设备的接口(interface)。然后我想根据谓词评估这些接口(interface)。

  1. 有更有效的方法吗?
  2. .filter(predicates.stream().reduce(Predicate::or) 给出以下错误: incompatible types:invalid method reference我不确定如何解决。

        parentReference.getDevices().stream().parallel().filter(ASA_PREDICATE).forEach((device) -> {
    List<Predicate<? super TufinInterface>> predicates = new ArrayList();

    if (iName != null) {
    Predicate< ? super TufinInterface> iNameFilter = myInterface -> Arrays.stream(iName)
    .allMatch(input -> myInterface.getName().toLowerCase().contains(input.toLowerCase()));
    predicates.add(iNameFilter);
    }
    if (ipLow != null) {
    Predicate< ? super TufinInterface> ipLowFilter = myInterface -> Arrays.stream(ipLow)
    .allMatch(input -> myInterface.getName().toLowerCase().contains(input.toLowerCase()));
    predicates.add(ipLowFilter);
    }
    if (ip != null) {
    Predicate< ? super TufinInterface> ipFilter = myInterface -> Arrays.stream(ip)
    .allMatch(input -> myInterface.getName().toLowerCase().contains(input.toLowerCase()));
    predicates.add(ipFilter);
    }
    if (zone != null) {
    Predicate< ? super TufinInterface> zoneFilter = myInterface -> Arrays.stream(zone)
    .allMatch(input -> myInterface.getName().toLowerCase().contains(input.toLowerCase()));
    predicates.add(zoneFilter);
    }

    try {
    ArrayList<TufinInterface> tufinInterfaces = Tufin.GET_INTERFACES(parentReference.user, parentReference.password, parentReference.hostName, device)
    .stream()
    .filter(predicates.stream().reduce(Predicate::or)
    .orElse(t->true)).parallel().collect(Collectors.toCollection(ArrayList<TufinInterface>::new));
    interfaces.addAll(tufinInterfaces);
    } catch (IOException | NoSuchAlgorithmException | KeyManagementException | JSONException | Tufin.IncompatibleDeviceException ex) {
    Logger.getLogger(InterfaceCommand.class.getName()).log(Level.SEVERE, null, ex);
    }

    });

最佳答案

Stream 有一个名为 anyMatch 的函数这可以稍微清理你的过滤器。

ArrayList<TufinInterface> tufinInterfaces = Tufin.GET_INTERFACES(parentReference.user, parentReference.password, parentReference.hostName, device)
.stream()
.filter(s -> predicates.stream().anyMatch(pred -> pred.test(s)))
.collect(Collectors.toList());

关于java - 在 Lambda 表达式中组合谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com