Создайте пользовательский предикат с параметром <String>и строкой - PullRequest
0 голосов
/ 04 января 2019

У меня есть String как "ishant" и Set<String> как ["Ishant", "Gaurav", "sdnj"]. Мне нужно написать Предикат для этого. Я пробовал, как приведенный ниже код, но он не работает

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

Как я могу создать Predicate, который примет Set<String> и String в качестве параметра и может дать результат?

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Если бы вы придерживались 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);
}
0 голосов
/ 04 января 2019

Ответ Аомин закончен. использование BiFunction<T, U, R> - это другой способ:

BiFunction<Set<String>,String,Boolean> checkIfCurrencyPresent = Set::contains;
0 голосов
/ 04 января 2019

A Predicate<T>, который вы используете в данный момент, представляет предикат (логическая функция) одного аргумента .

Вы ищете BiPredicate<T,U>, который по существу представляет предикат (булевозначная функция) из двух аргументов .

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

или со ссылкой на метод:

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