J'essaie de cartographier une chaîne aux expressions Lambda. Les expressions prennent une variable (carte) et renvoyent Faux ou exécutent une getOgefault sur la variable de carte donnée. Mais pour une raison quelconque, je reçois des erreurs.
Map<String, Runnable> order_function = new HashMap<>(); order_function.put("AlternativesValues", (Map x) -> { return false; }); order_function.put("AlternativesConstituent", (Map x) -> { x.getOrDefault("orderCloseCons", false); });
3 Réponses :
Peut-être que vous vouliez utiliser fonction code> au lieu de
exécutable code>:
Ou mappe
null code> résultats ...
the Runnable code>
ne renvoie rien. Si vous développez la Lambda à la mise en œuvre de la classe anonyme, vous verrez le type Void code> est le type de retour:
Map<String, Predicate<Map<? ,Boolean>>> order_function = new HashMap<>();
order_function.put("AlternativesValues", x -> false);
order_function.put("AlternativesConstituent", map -> map.getOrDefault("orderCloseCons", false));
S'ils veulent être des constantes, vous pouvez utiliser Enum code> comme ci-dessous.
OrderFunctions.ALTERNATIVES_CONSTITUENT.getOrderFunction().apply(someMap);
Pourquoi pensez-vous,
runnable code> est une interface appropriée pour une fonction qui nécessitera une carte code> comme entrée et retourner un
booléen code>?
@Holger je suis toujours tout à fait nouveau à Java, alors je ne suis pas sûr lequel est plus approprié, désolé :(
Vous remarquerez lorsque vous essayez réellement de invoquer i> la méthode fonctionnelle. Cette méthode look Convient à votre tâche?
@Holger j'ai vu une implémentation similaire en ligne qui a été utilisée courante, donc je suis allé avec elle. Utiliser la fonction serait plus approprié?
Vous pouvez passer par Ces interfaces a> et choisir le plus approprié. Le problème est que «essayer de cartographier une chaîne à des expressions Lambda» n'est pas un problème de programmation utile réel. Lorsque vous commencez avec ce que vous avez besoin de la carte, vous reconnaîtrez rapidement ce qui est utile et ce qui n'est pas. Si l'interface est implémentée via des expressions Lambda ou des classes ordinaires, n'est pas pertinente.