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

Ish*_*rav 9 java predicate java-8 functional-interface

我有一个String"ishant"和一个Set<String>["Ishant","Gaurav","sdnj"].我需要为此编写谓词.我尝试过如下代码,但它无法正常工作

Predicate<Set<String>,String> checkIfCurrencyPresent = (currencyList,currency) -> currencyList.contains(currency);
Run Code Online (Sandbox Code Playgroud)

如何创建一个Predicate将采取Set<String>String作为参数,并可以给结果呢?

Ous*_* D. 8

Predicate<T>,您目前正在使用代表一个谓语(布尔值函数)一个说法.

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

BiPredicate<Set<String>,String>  checkIfCurrencyPresent = (set,currency) -> set.contains(currency);
Run Code Online (Sandbox Code Playgroud)

或方法参考:

BiPredicate<Set<String>,String> checkIfCurrencyPresent = Set::contains;
Run Code Online (Sandbox Code Playgroud)


Nam*_*man 7

如果你坚持使用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
Run Code Online (Sandbox Code Playgroud)

BiPredicate和之间的主要区别在于Predicate它们的test方法实现.A Predicate会使用

public boolean test(String o) {
    return currencies.contains(o);
}
Run Code Online (Sandbox Code Playgroud)

而a BiPredicate会改为使用

public boolean test(Set<String> set, String currency) {
    return set.contains(currency);
}
Run Code Online (Sandbox Code Playgroud)