8
votes

Créer un prédicat personnalisé avec Set et String comme paramètre

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?


0 commentaires

3 Réponses :


8
votes

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


1 commentaires

Comment appeler ce prédicat dans le code? J'utilise ce code booléen isCurrencyCodeValid = requestCurrencyCodes.stream () .noneMatch (checkIfCurrencyPresent (currencyValues, requireCurr‌ eny));



7
votes

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


0 commentaires

2
votes

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;


0 commentaires