使用 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
BiPredicate
和 Predicate
之间的主要区别在于它们的 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;
我有一个 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
BiPredicate
和 Predicate
之间的主要区别在于它们的 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;