Alguns conceitos:
Programação Funcional é um paradigma que deriva das funções matemáticas y = f(x), o que permite que algumas funcionalidades da linguagem Java possam ser de certo modo mantidas com uma verbosidade de código muito mais enxuta (menos código escrito).
Obviamente a programação funcional não traz apenas a escrita do código mais resumida. Uma das principais vantagens da programação funcional é a imutabilidade (pois não estamos pensando apenas nos dados e sim nas funcionalidades que serão executadas) e também no acoplamento das funções, o que traz uma maior coesão dos softwares desenvolvidos.
Entretanto o modo de pensar precisa ser revisto, pois tudo agora é condicionado a uma entrada e uma saída (toda função pode ou não ter entrada, realiza sua tarefa e gera alguma saída). Vamos entender um pouco:
1. public class App{
2. public static void main(String args[]){
3. Runnable runnable = new Runnable(){
4. @Override
5. public void run(){
6. System.out.println("Ola OzJUG");
7. }
8. };
9. Thread thread = new Thread(runnable);
10. thread.start();
11. }
12. }
Analisando o código, o trecho que efetivamente interessa na lógica da Thread é efetivamente a linha 6. Toda a declaração e sobrescrita da classe anônima a partir da interface Runnable acaba gerando uma série de linhas de código que poderiam ser dispensáveis (já que são apenas formalismos declarativos).
Pensando em funcional, muita coisa pode mudar e a versão funcional
1. public class App{
2. public static void main(String args[]){
3. Runnable runnable = () -> System.out.println("Rodando uma thread");
4. Thread thread = new Thread(runnable);
5. thread.start();
6. }
7. }
Como podemos ver, a idéia de se utilizar a Interface Funcional Runnable (que só tem um método - run) é trazer a notação (na linha 3) de que seu código correspondente seja apenas uma única linha. Interpretamos esta linha como uma forma de "implicação", ou seja, "se temos um runnable então seu código é System.out.println...".
Claro que este é apenas um exemplo simples, outros exemplos estão disponíveis em nosso repositório, do GITHUB.
