我有一个String
作为“ ishant”和一个Set<String>
作为[“ Ishant”,“ Gaurav”,“ sdnj”]。我需要为此编写谓词。我已经尝试过下面的代码,但是不起作用
Predicate<Set<String>,String> checkIfCurrencyPresent = (currencyList,currency) -> currencyList.contains(currency);
如何创建一个Predicate
,它将Set<String>
和String
作为参数并给出结果?
答案 0 :(得分:8)
您当前正在使用的Predicate<T>
表示一个参数的谓词(布尔值函数)。
您正在寻找一个BiPredicate<T,U>
,它本质上表示两个参数的谓词(布尔值函数)。
BiPredicate<Set<String>,String> checkIfCurrencyPresent = (set,currency) -> set.contains(currency);
或带有方法参考:
BiPredicate<Set<String>,String> checkIfCurrencyPresent = Set::contains;
答案 1 :(得分: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
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);
}
答案 2 :(得分:2)
Aomine的答案已经完成。使用BiFunction<T, U, R>
是另一种方式:
BiFunction<Set<String>,String,Boolean> checkIfCurrencyPresent = Set::contains;