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

时间:2019-01-04 14:05:15

标签: java java-8 predicate functional-interface

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

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

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

3 个答案:

答案 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

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);
}

答案 2 :(得分:2)

Aomine的答案已经完成。使用BiFunction<T, U, R>是另一种方式:

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