gpt4 book ai didi

java - 即时创建谓词

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:36 24 4
gpt4 key购买 nike

我有一个用户输入的 String[],我想根据设备的主机名是否包含任何用户输入来过滤设备集合。

我正在努力跟上类(class) https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html去做这个。

interface PredicateOperation{
Predicate operation(String[] input);
}

public Predicate getPredicate(String[] input, PredicateOperation op){
return op.operation(input);
}

private TufinDeviceCollection<TufinDevice> filter(TufinDeviceCollection<TufinDevice> devices) {

//Check if any HostNames of the devices contain any of the items in String[] modelContains

devices = devices.stream()
.sequential()
.filter(//How do i create this predicate?)//we need to create the lamda expression to evaulate if the hostName of device d contains any of the items String[] userInput
.collect(Collectors.toCollection(TufinDeviceCollection<TufinDevice>::new));

}

我不清楚如何定义 .filter(..) 中的 PredicateOperation

最佳答案

.filter(device -> Arrays.stream(userInput)
.anyMatch(input -> device.getHostName().contains(input)))

但是你需要String[] userInput可从 filter 访问方法。

我猜这是尝试自己写 @FunctionalInterface取代标准 Predicate<T> .

interface PredicateOperation {
Predicate operation(String[] input);
}

虽然这不是很实用。

PredicateOperation operation = (String[] input) -> ((Object o) -> true);

为什么我需要返回 Predicate如果我可以返回结果?一个小的增强版本将是

interface PredicateOperation {
boolean operation(String[] input);
}

PredicateOperation operation = (String[] input) -> true;

Stream#filter 以来,它对 Stream API 仍然不是特别有用期望一个 java.util.function.Predicate<T> ,不是你喜欢的类型。

而且,是的,停止使用原始 Predicate

关于java - 即时创建谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57280047/

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