gpt4 book ai didi

java - 如何从 Java 中的谓词自定义列表创建谓词?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:44 24 4
gpt4 key购买 nike

我对编程还比较陌生,过去两天我一直在想如何制作一个由其他谓词的自定义列表构成的谓词。所以我想出了某种解决方案。下面是一个代码片段,应该会给你一个想法。因为我是在阅读各种文档的基础上编写的,所以我有两个问题:1/这是一个好的解决方案吗? 2/对于这个问题还有其他推荐的解决方案吗?

public class Tester {
private static ArrayList<Predicate<String>> testerList;

//some Predicates of type String here...

public static void addPredicate(Predicate<String> newPredicate) {
if (testerList == null)
{testerList = new ArrayList<Predicate<String>>();}
testerList.add(newPredicate);
}

public static Predicate<String> customTesters () {
return s -> testerList.stream().allMatch(t -> t.test(s));

}
}

最佳答案

你可以有一个静态方法来接收许多谓词并返回你想要的谓词:

public static <T> Predicate<T> and(Predicate<T>... predicates) {
// TODO Handle case when argument is null or empty or has only one element
return s -> Arrays.stream(predicates).allMatch(t -> t.test(s));
}

变体:

public static <T> Predicate<T> and(Predicate<T>... predicates) {
// TODO Handle case when argument is null or empty or has only one element
return Arrays.stream(predicates).reduce(t -> true, Predicate::and);
}

我在这里使用 Stream.reduce ,它将身份和运算符作为参数。 Stream.reducePredicate::and 运算符应用于流的所有元素以生成结果谓词,并使用标识对流的第一个元素进行操作。这就是为什么我使用 t -> true 作为标识,否则结果谓词可能最终评估为 false

用法:

Predicate<String> predicate = and(s -> s.startsWith("a"), s -> s.length() > 4);

关于java - 如何从 Java 中的谓词自定义列表创建谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44210562/

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