W jaki sposób mogę napisać z Java 8 z zamknięciami obsługuje metodę, która przyjmuje jako argument funkcji i funkcji powrotu jako wartość?Wyrażenia lambda i funkcje wyższego rzędu
Odpowiedz
W języku Java Lambda API główną klasą jest java.util.function.Function.
Możesz użyć odniesienia do tego interfejsu w taki sam sposób, jak zrobiłbyś z wszystkimi innymi odniesieniami: utwórz je jako zmienne, zwróć je w wyniku obliczeń i tak dalej.
Oto dość prosty przykład, który może pomóc:
public class HigherOrder {
public static void main(String[] args) {
Function<Integer, Long> addOne = add(1L);
System.out.println(addOne.apply(1)); //prints 2
Arrays.asList("test", "new")
.parallelStream() // suggestion for execution strategy
.map(camelize) // call for static reference
.forEach(System.out::println);
}
private static Function<Integer, Long> add(long l) {
return (Integer i) -> l + i;
}
private static Function<String, String> camelize = (str) -> str.substring(0, 1).toUpperCase() + str.substring(1);
}
Jeśli trzeba przejść więcej niż 1 parametr, proszę spojrzeć do compose
metody, ale jej użycie jest dość trudne.
Zasadniczo z mojej opinii zamknięcia i lambdy w Javie są w zasadzie cukrem składniowym i wydają się nie mieć wszystkich możliwości programowania funkcjonalnego.
dziękuję bardzo za odpowiedź! Czy wiesz, czy to ma zastosowanie: dodaj (8) (10), ponieważ to jest bardzo nudne: dodaj (8) .apply (10) – xdevel2000
Niestety wydaje się, że nie jest dozwolone, przynajmniej - teraz – n1ckolas
n1ckolas, przepraszam , Nie znajduję żadnej metody komponowania ... gdzie mogę szukać przykładu napisania funkcji o większej liczbie parametrów? – xdevel2000
- 1. Jak działają funkcje wyższego rzędu Kotlin?
- 2. Makra wyższego rzędu
- 3. Ujednolicenie wyższego rzędu
- 4. Maszynopis - typy funkcji wyższego rzędu
- 5. Funkcje drugiego rzędu w GLSL?
- 6. wyższego rzędu konstruktorów typu i funktory w SML
- 7. Korzystanie z funkcji wyższego rzędu w Ruby
- 8. Programowanie wyższego rzędu za pomocą Boost :: Python
- 9. Powszechna praktyka polimorfizmu wyższego rzędu w scala
- 10. Zadzwoń wyższego rzędu F # funkcji z C#
- 11. Wyrażenia Lambda
- 12. Zachowanie z funkcjami wyższego rzędu w kotlinach i interfejsami opartymi na pojedynczej metodzie?
- 13. Doskonałe-spedycyjnych wywoływalne obiekty w funkcji wyższego rzędu
- 14. C# lambda Funkcje: zwracania danych
- 15. Niepoprawne wcięcie Wyrażenia Lambda
- 16. Wymień parametru lambda wyrażenia
- 17. połączeń wewnątrz lambda wyrażenia
- 18. umożliwienie wyrażenia lambda
- 19. Wyrażenia Lambda: zachowanie kompilatora
- 20. Wyrażenia VB.NET Lambda
- 21. Wyrażenia kontra Lambda
- 22. W klauzuli wyrażenia lambda
- 23. możliwe rekursywne wyrażenia lambda?
- 24. Wyrażenia Java Lambda
- 25. ThreadPool.QueueUserWorkItem z wyrażenia lambda i metody anonimowej
- 26. Wyrażenia lambda Haskella i proste formuły logiczne
- 27. Zamieszanie na `action delegata i lambda wyrażenia
- 28. Każdy pomysł na temat budowy wyższego rzędu programu Quine?
- 29. Wykorzystanie _ funkcje lambda Scala
- 30. Jak spłaszczyć listę opcji za pomocą funkcji wyższego rzędu?
[Zamknięcia specyfikacji projektu Java (autor: Neal Gafter i Peter von der Ahé)] (http://javac.info/) –
@Quoi Ta strona internetowa odnosi się do propozycji, które umarły lata temu. Postęp w kierunku wdrożenia Java 8 patrz http://lambdafaq.org –
@MauriceNaftalin dzięki –