A interface funcional é uma interface que possui apenas um método abstrato, mas pode ter vários métodos não abstratos.
As interfaces funcionais podem ser implicitamente convertidas em expressões de lambda.
As interfaces funcionais podem suportar lambdas amigáveis pelas funções existentes.
introduzir
As interfaces funcionais são na verdade uma classe de interface abstrata. As seguintes interfaces funcionais foram encontradas antes do Java 8.
java.lang.runnablejava.util.concurrent.callablejava.util.comparator
etc ...
Como usar
De fato, a classe de interface mencionada acima só precisa ser modificada com anotação funcional -interface e se torna uma interface funcional no Java. Por exemplo, a definição de interface chamada em JDK
@FunctionAlInterfacePublic Interface Callable <V> {V Call () lança Exception;}É tão simples.
Agora vamos falar sobre a nova interface de função adicionada ao Java 8. Aqui está a sua definição
// t é o parâmetro de entrada // r é o parâmetro de retorno @functionInterfacePublic Interface Função <t, r> {r Aplicar (t t); padrão <V> função <v, r> compor (function <? super v ,? estende t> antes {objects.RequirEnOnnull (antes); return (v v) -> aplicar (antes.apply (v));} padrão <V> função <t, v> andthen (function <? depois.Apply (Aplicar (t));Pode ser entendido como um ponteiro de função na linguagem C (opinião pessoal).
No uso real, o método de aplicação é amplamente utilizado. Compor/e então é usado principalmente em cenários em que mais de duas interfaces de função e sequência de execução são realizadas.
Em um código comercial específico, geralmente o uso em combinação com o Bifuncton/Fornecedor. A bifuncionamento suporta 2 parâmetros, a função suporta apenas um parâmetro. O fornecedor pode ser usado para armazenar valores necessários específicos e obtê -los através do GET.
exemplo
Referências ao código em que você geralmente trabalha. Este exemplo evita principalmente as condições de julgamento múltiplas que, se/caso contrário, o código é inchado. Ao mesmo tempo, a mesma lógica de negócios pode ser abstraída da interface da função, para que o código possa ser reutilizado em vários lugares. O código específico é o seguinte.
Função <objeto, número inteiro> actionTest1 = (object) -> {// lógica retorna 0;}; função <objeto, inteiro> actionTest2 = (object) -> {// Logic Return 0;}; Public Supplier <map <integer, função <ject, integger>> ACTIONSUPLIER = () -> Hashmap <> (); maps.put (1, ActionTest1); maps.put (2, ActionTest2); retornar maps;}; // use o teste public void (tipo int, objeto objeto) {opcional.ofnullable (Actionupplier.get (). get (type)). ifpresent (x -> x.apply (v, objeto)); // if/else lógica if (type == 1) {// test1 lógica} else if (type == 2) {// test2 lógica}}Resumir
Pessoalmente, acredito que em cenários em que há mais julgamentos nas filiais da lógica de negócios, é mais adequado usar a função e há os seguintes benefícios.
Exemplo de interface funcional
A interface predicada <t> é uma interface funcional que aceita um parâmetro de entrada t e retorna um resultado booleano.
Essa interface contém uma variedade de métodos padrão para combinar predicado em outras lógicas complexas (como: versus ou, não).
Essa interface é usada para testar o objeto é verdadeiro ou falso.
Podemos entender o uso do predicado da interface funcional <T> através do exemplo a seguir (java8tester.java):
Arquivo java8Tester.java importar java.util.arrays; importar java.util.list; importar java.util.function.predicate; classe pública Java8tester {public static void main (string args []) {list <Teger> list = arrays.asList (1, 2, 3, 4, 5, 6, 7, 8, 9, 9); // predicado <inteiro> predicado = n -> true // n é um método de teste que passa argumentos para a interface predicada // n, se houver, o método de teste retorna true system.out.println ("out todos os dados:"); // passa no parâmetro n avaliou (list, n-> true); // predicado <inteiro> previc1 = n -> n%2 == 0 // n é um método de teste que passa o parâmetro para a interface predicada // se n%2 for 0 método de teste retorna true system.out.println ("fora de todos os números uniformes:"); Eval (lista, n-> n%2 == 0); // predicado <inteiro> previc2 = n -> n> 3 // n é um método de teste que passa o parâmetro para a interface do predicado // se n for maior que 3 método de teste retorna o verdadeiro sistema.out.println ("Sair todos os números maiores que 3:"); Eval (lista, n-> n> 3); } public static void Eval (List <Teger> List, predicado <TEGER> prevê) {for (integer n: list) {if (predicado.test (n)) {System.out.println (n + ""); }}}}Execute o script acima e o resultado da saída é:
$ javac java8tester.java
$ java java8tester
Saia todos os dados:
1
2
3
4
5
6
7
8
9
Saia todos os números uniformes:
2
4
6
8
Saia todos os números maiores que 3:
4
5
6
7
8
9
Resumir
O exposto acima é o Java 8 FUNCTION FUNCIAL EXEMPLOS EXEMPLOS DE INTERFACE FUNCIONAL Introduzidos pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!