J'ai une String
comme "ishant" et un Set
comme ["Ishant", "Gaurav", "sdnj"]. J'ai besoin d'écrire le prédicat pour cela. J'ai essayé le code ci-dessous, mais cela ne fonctionne pas
Predicate<Set<String>,String> checkIfCurrencyPresent = (currencyList,currency) -> currencyList.contains(currency);
Comment puis-je créer un Predicate
qui prendra Set
et String
comme paramètre et peut donner le résultat?
3 Réponses :
Un Prédicat
que vous utilisez actuellement représente un prédicat (fonction à valeur booléenne) d'un argument .
Vous recherchez un BiPredicate
qui représente essentiellement un prédicat (fonction à valeur booléenne) de deux arguments .
BiPredicate<Set<String>,String> checkIfCurrencyPresent = Set::contains;
ou avec une référence de méthode:
BiPredicate<Set<String>,String> checkIfCurrencyPresent = (set,currency) -> set.contains(currency);
Comment appeler ce prédicat dans le code? J'utilise ce code booléen isCurrencyCodeValid = requestCurrencyCodes.stream () .noneMatch (checkIfCurrencyPresent (currencyValues, requireCurr eny));
Si vous deviez vous en tenir à l'utilisation de Predicate
, utilisez quelque chose de similaire à:
public boolean test(Set<String> set, String currency) { return set.contains(currency); }
La principale différence entre BiPredicate
et Predicate serait leur implémentation de méthode de test
. Un Predicate
utiliserait
public boolean test(String o) { return currencies.contains(o); }
et un BiPredicate
utiliserait plutôt
Set<String> currencies = Set.of("Ishant", "Gaurav", "sdnj"); String input = "ishant"; Predicate<String> predicate = currencies::contains; System.out.print(predicate.test(input)); // prints false
La réponse d'Aomine est complète. l'utilisation de BiFunction
est une autre façon:
BiFunction<Set<String>,String,Boolean> checkIfCurrencyPresent = Set::contains;