Show Menu
Cheatography

JAVA Lambdas Cheat Sheet (DRAFT) by

Lambdas en JAVA, employées dans des méthodes basiques (forEach....) ou des Streams

This is a draft cheat sheet. It is a work in progress and is not finished yet.

Introd­uction

Fonction anonyme qui implémente une interface foncti­onelle.
Consum­er<­Str­ing> consumer = (s) -> System.ou­t.p­rin­tln(s);
Structure
- Parametres - optionnels
- -> - opérateur flêche
- Corps - Bloc de code

La lambda capture les variables locales, à condition qu'elle soient effect­ivement finales. Elle récupère le this et super du context.
Elle ne throw pas d'exce­ption, l'util­isation d'un try/catch est recomm­andé.
Elle peut être remplacée par une method reference pour les cas simples (Class­::m­ethod | object­::m­ethod | Class:­:new).

Optional

// L'interface Optional permet de gérer les cas de null pointeur de manière élégante.
Optional<Product> findProduct(products, product → product.getName().equals(“tomato”))
.map(Product::getPrice)     // method ref
.ifPresentOrElse(
    // 1.Consumer if !empty
    price → System.out.printf(“Price of tomato is € %.2f%n”,, price),
    // 2.Runnable if empty
    () → System.out.printf(“Tomato is not available”)
);

andThen | compose

// Combinaison de 2 lambdas via ces operateurs équivalents. Seul l'ordre des lambdas varie.
// lambda 1
Function<Product, BigDecimal> productToPrice = Product::getPrice;
// lambda 2
Function<BigDecimal, String> priceToMessage = price → “Tomato price is € “ + price;
// 1.andThen(2)
Function <Product, String> productToMessage = productToPrice.andThen( priceToMessage);
// 2.compose(1)
Function <Product, String> productToMessage2 =priceToMessage.compose(productToPrice);

Interface foncti­onnelle - Single Abstract Method

Interface disposant d'un seule méthode abstraite.

Pour s'assurer de la validité d'une interface foncti­onn­elle, on peut utiliser l'anno­tation @Funct­ion­alI­nte­rface.

Les interfaces foncti­onn­elles existent aussi pour 2 types traités (BiFun­ction, BiConsumer etc...) sauf Supplier.
On trouvera aussi des interfaces spécia­lisées par type (IntFu­nction, IntBin­ary­Ope­rator, LongTo­Dou­ble­Fun­ction, etc...).
 

Interfaces foncti­onn­elles princi­pales

Nom
Méthode
In/Out
Functi­on<­T,R>
R apply(T value)
T -> R
Consum­er<­T>
void accept(T value)
T -> void
Suppli­er<­T>
T get()
void -> T
Compar­ato­r<T>
int compare(T val1, T val2)
T -> int
Option­al<­T>
<T­\|em­pty> filter(T value)
T -> <T­\|em­pty>
Predic­ate­<T>
boolean test(T value)
T -> boolean