Dernière modification : 24/08/2022

UnaryOperator - Java 8

Le UnaryOperator est une interface fonctionnelle ayant un seul argument T en entrée et retourne un objet de type T. Sa définition est la suivante :

@FunctionalInterface
public interface UnaryOperator extends Function {
}

Cette interface fonctionnelle étend l'interface function :

@FunctionalInterface
public interface Function {
    R apply(T t);
}

1. Function vs UnaryOperator

Dans cet exemple, nous allons voir que Function peut être remplacé par UnaryOperator :

final Function func = x -> x + 4;
final Integer result = func.apply(2);
System.out.println(result); // 6

final UnaryOperator func2 = x -> x + 4;
final Integer result2 = func2.apply(2);
System.out.println(result2); // 6

2. UnaryOperator en argument

public static void main(final String[] args) {
    final List list = Arrays.asList("Alex", "Claire", "Angel");
    final List result = UnaryOperatorTest.utilisateur(list, x -> "Utilisateur :" + x);
    System.out.println(result); // [Utilisateur :Alex, Utilisateur :Claire, Utilisateur :Angel]

}

public static  List utilisateur(final List list, final UnaryOperator uo) {
    final List result = new ArrayList<>();
    list.forEach(x -> result.add(uo.apply(x)));
    return result;
}

3. Chaînage d'UnaryOperator

public static void main(final String[] args) {
    final List list = Arrays.asList("Alex", "Claire", "Angel");
    final List result = UnaryOperatorTest.utilisateur(list, x -> "[Utilisateur :" + x, x -> x + "]");
    System.out.println(result); // [[Utilisateur :Alex], [Utilisateur :Claire], [Utilisateur :Angel]]

}

public static  List utilisateur(final List list, final UnaryOperator uo, final UnaryOperator uo2) {
    final List result = new ArrayList<>();
    list.forEach(x -> result.add(uo.andThen(uo2).apply(x)));
    return result;
}