2016-09-12 1 views
-3

Ceci est ma première approche aux expressions lambda, fonction en tant que paramètre ou dans la programmation fonctionnelle générale ...fonction Java passe en tant que paramètre

Comment puis-je appeler la fonction B dans ce code?

public class Fp_example<T> 
{ 
    public static void main(String[] args) 
    { 
     ArrayList<String> names = new ArrayList<>(asList("A")); 
     new Fp_example.b_function(names, /* (1) */); 
    } 

    public void b_function(ArrayList<T> l, Function<T,T> func) 
    { 
     l.forEach((t) -> {func.apply(t);}); 
    } 
} 

Je dois écrire ma fonction (1), ou puis-je écrire une autre fonction et il suffit d'appeler à l'intérieur (1)?

+0

Que voulez-vous faire, exactement? – SOFe

+3

Si c'est votre première approche, je vous recommande de commencer par les tutoriels Oracle Java https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html. Ils vous apprendront à utiliser l'expression lambda. Vous serez en mesure d'apprendre plus efficacement de cette façon. – Tunaki

+0

Je veux appeler une fonction sur chaque élément de ma ArrayList. Cette fonction prend un élément T en entrée et retourne un élément T aussi @PeMapModder –

Répondre

1

Tout d'abord, vous devez instancier Fp_example<String>, puisque vous passez un ArrayList<String> à b_function.

Maintenant, c'est à vous de décider quelle fonction passer à la méthode, en fonction de la façon dont vous souhaitez transformer l'entrée String s. Toute expression lambda qui prend un argument String et renvoie un String fera l'affaire.

Par exemple, vous pouvez passer une expression lambda qui inverse l'entrée String s:

new Fp_example<String>().b_function(names, s -> new StringBuilder(s).reverse().toString()); 

ou

Function<String,String> a_function = s -> new StringBuilder(s).reverse().toString(); 
new Fp_example<String>().b_function(names, a_function); 

Vous pouvez afficher la sortie de l'application de la fonction sur les éléments d'entrée , cependant:

+0

Ok merci l'homme et Si je veux passer une fonction encore définie? Par exemple je a_function et b_function et je veux appeler b_function comme ceci: b_function (noms, a_function) –

+0

@MarcoCastano Si '' a_function' est une fonction ', vous pouvez passer à' b_function'. – Eran

+0

Pouvez-vous juste poster un code comme exemple? .. s'il vous plaît @Eran –