---
# System prepended metadata

title: <font size="8pt"><b>Programmation fonctionnelle</b></font>
tags: [Traitement parallèle de donnée]

---

---
title: "Revision Java - Programmation Fonctionnelle"
author: [Simon Meier]
date: "25.11.2021"
subject: "Java"
keywords: [Java, Programmation Fonctionnelle]
subtitle: "Résumé Programmation fonctionnelle"
lang: "en"
titlepage: true,
titlepage-text-color: "FFFFFF"
titlepage-rule-color: "360049"
titlepage-rule-height: 0
titlepage-background: "background.pdf"
...

###### tags: `Traitement parallèle de donnée`

![](https://i.imgur.com/pW7K0Xp.png)

<font size="4pt"><sup>*Semestre automne 2021*</sup></font>

# <font size="8pt"><b>Programmation fonctionnelle</b></font>

## Interfaces fonctionnelles

Les interfaces fonctionnelles définissent des types qui pourront être implémentés sous la forme d'expressions lambda ou de références de méthodes.

Une interface fonctionnelle est une interface dans laquelle une seule méthode abstraite est définie.
- Elle doit respecter certaines contraintes:
    - elle ne doit avoir qu'une seule méthode déclarée abstraite
    - les méthodes définies dans la classe Object ne sont pas prises en compte comme étant des méthodes abstraites
    - toutes les méthodes doivent être public
    - elle peut avoir des méthodes par défaut et static

Une expression lambda peut être utilisée partout où un objet de type interface fonctionnelle est attendu.

## Interfaces fonctionnelles du package java.util.function

Les interfaces de ce package respectent une convention de nommage selon leur rôle:

|Interface|methode abstraite|rôle|
|:-:|:-:|:-:|
|Predicat|`.test()`|Tester|
|Consumer|`.accept()`|Executer|
|Function|`.apply()`|Transformer|
|Supplier|`.get()`|Fournir|

### Predicat

|Interface fonct.|rôle|
|:-:|:-:|
|`Predicate T`|prédicat qui attend en paramètre un argument de type T et renvoie un booléen|
|`BiPredicate<T,U>`|prédicat qui attend deux paramètres et renvoie un booléen|
|`IntPredicate`|prédicat qui attend en paramètre un argument de type int et renvoie un booléen|
|`LongPredicate`|prédicat qui attend en paramètre un argument de type long et renvoie un booléen|
|`DoublePredicate`|prédicat qui attend en paramètre un argument de type double et renvoie un booléen|

### Consumer

|Interface fonct.|rôle|
|:-:|:-:|
|`Consumer T`|consommateur d'un unique paramètre qui ne renvoie aucune valeur|
|`BiConsumer<T,U>`|opération qui requiert deux objets et ne renvoie aucun résultat|
|`IntConsumer`|consommateur d'une valeur de type int|
|`LongConsumer`|consommateur d'une valeur de type long|
|`DoubleConsumer`|consommateur d'une valeur de type double|
|`ObjIntConsumer T`|consommateur qui attend en paramètres un objet de type T et un int|
|`ObjDoubleConsumer T`|consommateur qui attend en paramètres un objet de type T et un double|
|`ObjLongConsumer T`|consommateur qui attend en paramètres un objet de type T et un long|

### Function

|Interface fonct.|rôle|
|:-:|:-:|
|`Function<T,R>`|fonction qui attend un paramètre de type T et renvoie un résultat de type R|
|`BiFunction<T,U,R>`|fonction qui attend en paramètre une valeur de type int et renvoie un résultat de type R|
|`IntFunction<R>`|fonction qui attend en paramètre une valeur de type int et renvoie un résultat de type R|
|`LongFunction<R>`|fonction qui attend en paramètre une valeur de type long et renvoie un résultat de type R|
|`DoubleFunction<R>`|fonction qui attend en paramètre une valeur de type double et renvoie un résultat de type R|
|`ObjIntConsumer T`|consommateur qui attend en paramètres un objet de type T et un int|
|`ObjDoubleConsumer T`|consommateur qui attend en paramètres un objet de type T et un double|
|`ObjLongConsumer T`|consommateur qui attend en paramètres un objet de type T et un long|

