---
# System prepended metadata

title: Interface fonctionnelle

---

###### tags: Traitement Parallèle de Données

# Interface fonctionnelle


| Interface fonctionnelle |  utilité  | terminal |
|:-----------------------:|:---------:|:--------:|
|      Predicate<T>       |  filtrer  |   non    |
|       Consumer<T>       |  foreach  |   oui    |
|    BinaryOperator<T>    | reduction |   oui    |
|    UnaryOperator<T>     | reduction |   oui    |
|    IntBinaryOperator    | reduction |   oui    |
|     IntUnaryOperator    | reduction |   oui    |
|   DoubleUnaryOperator   | reduction |   oui    |
|  DoubleBinaryOperator   | reduction |   oui    |
|     Function<T1,T2>     |    map    |   non    |
|    ToIntFunction<T1>    |    map    |   non    |
| BiFunction<T1, T2, T3>  |    map    |   non    |


## Opérateur default

DoubleBinaryOperator = BiFunction<Double, Double>
-> ainsi plus besoin d'avoir de wrapper


## Stream

```java=
Stream<Integer> stream = list.stream();
```

Un `Stream`, une fois employé, n'existe plus. Par exemple en écrivant : 
`size = stream.count();`

On ne peut plus employé la variable stream.

Pour simplifier les Stream : 

mapToInt -> IntStream
- même chose pour tous les autres types simples
mapToInt(...).sum()


Methods terminales : 

- reduce, count, collect, toArray, forEach

Methodes non-terminales : 

- sorted, mapToInt, map, 


Integer:: -> sum, compare, 


Moyen mnémotechnique pour se rappeler des méthodes dans Collectors :
même chose que dans Stream, mais avec -ing ->
- exemple : 
    - reduce -> reducing


`IntFunction<Integer[]> tabGenerator = Integer[]::new;`
