使用 Set<String> 和 String 作为参数创建自定义谓词

Create custom Predicate with Set<String> and String as parameter

我有一个 String 作为 "ishant" 和一个 Set<String> 作为 ["Ishant", "Gaurav", "sdnj"] 。我需要为此编写谓词。我试过下面的代码,但它不起作用

Predicate<Set<String>,String> checkIfCurrencyPresent = (currencyList,currency) -> currencyList.contains(currency);

如何创建一个将 Set<String>String 作为参数并给出结果的 Predicate

您当前使用的 Predicate<T> 代表一个谓词(布尔值函数)一个参数

您正在寻找 BiPredicate<T,U>,它本质上代表一个谓词(布尔值函数)两个参数

BiPredicate<Set<String>,String>  checkIfCurrencyPresent = (set,currency) -> set.contains(currency);

或方法参考:

BiPredicate<Set<String>,String> checkIfCurrencyPresent = Set::contains;

如果您坚持使用 Predicate,请使用类似的内容:

Set<String> currencies = Set.of("Ishant", "Gaurav", "sdnj");
String input = "ishant";
Predicate<String> predicate = currencies::contains;
System.out.print(predicate.test(input)); // prints false

BiPredicatePredicate 之间的主要区别在于它们的 test 方法实现。 Predicate 会使用

public boolean test(String o) {
    return currencies.contains(o);
}

BiPredicate 将改为使用

public boolean test(Set<String> set, String currency) {
    return set.contains(currency);
}

青峰的回答完毕。使用 BiFunction<T, U, R> 是另一种方式:

BiFunction<Set<String>,String,Boolean> checkIfCurrencyPresent = Set::contains;