2016-09-12 3 views
-3

Это мой первый подход к лямбда-выражениям, функция как параметр или в общем функциональном программировании ...Функция передачи Java как параметр

Как я могу назвать функцию B в этом коде?

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

Мне нужно написать свою функцию в (1), или я могу написать другую функцию и просто вызвать ее внутри (1)?

+0

Что именно вы хотите сделать? – SOFe

+3

Если это ваш первый подход, я рекомендую вам сначала изучить учебники Oracle Java https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html. Они научат вас использовать лямбда-выражение. Вы сможете научиться более эффективно таким образом. – Tunaki

+0

Я хочу вызвать функцию для каждого элемента моего массива ArrayList. Эта функция принимает элемент Т в качестве входных данных и возвращает элемент Т слишком @PeMapModder –

ответ

1

Прежде всего, вы должны создать экземпляр Fp_example<String>, так как вы проходите мимо ArrayList<String> до b_function.

Теперь вам решать, какую функцию перейти к методу, в зависимости от того, как вы хотите преобразовать входные данные String. Любое выражение лямбда, которое принимает аргумент String и возвращает String.

Например, вы можете передать лямбда-выражения, который переворачивает на вход String S:

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

или

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

Вы можете отобразить результат применения функции на входных элементов , хотя:

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

Хорошо спасибо мужчине и Если я хочу передать определенную функцию? Например У меня есть a_function и b_function, и я хочу, чтобы позвонить b_function так: b_function (имена, a_function) –

+0

@MarcoCastano Если 'a_function' является' 'Функция , вы можете передать его' b_function'. – Eran

+0

Можете ли вы просто отправить код в качестве примера? .. please @Eran –

Смежные вопросы