Possuem apenas um método abstrato
- Fortemente relacionadas com lambda expressions
- Podem ter outros métodos, porém eles precisam ser
static
,default
ouprivate

Principais Functional Interfaces
Predicate<T>
: executar testes
Function<T, R>
: converter tipos
UnaryOperator<T>
: é uma variante deFunction
focada em converter valores (e.g. capitalizar as palavras em uma String)
Consumer<T>
: processar elementos (e.g. fazer ações com base em um determinado elemento; operações que umforEach
oupeek
executariam)
Supplier<T>
: gerar elementos
- Existem ainda variantes de primitivos para essas functional interfaces. Essas variantes existem para evitar escrever muito código já existente, quando for necessário acelerar a performance de operações em Streams que lidem com os primitivos
int
,double
elong
- Existem também variantes de dois argumentos (bi-argument)

Comparator
- O método
thenComparing
permite fazer uma sequência de comparações
- O método
reversed
permite inverter a ordem da coleção comparada
Predicate
- Os métodos
and
eor
combinam predicados
- O método
negate
nega o resultado de umPredicate
- O método
not
é a versão estática denegate
- O método
isEqual
compara um dado objeto com o conteúdo da coleção comparada
Function
- O método
andThen
executa uma função com o resultado da primeira operação como input
- O método
compose
executa uma função antes da que a invocou e passa seu resultado para ela
- O método
identity
retorna uma função que retorna seu input como argumento; equivalente at -> t