Livre de recettes fonctionnelles en goyave

Livre de recettes fonctionnelles de goyave

1. Vue d'ensemble

Ce livre de recettes est organisé ensmall and focused recipes and code snippets pour utiliser les éléments de style fonctionnel Guava - Prédicats et fonctions.

Lecookbook format est ciblé et pratique - aucun détail ni explication superflue n'est nécessaire.

2. Le livre de recettes

filtrer une collection par une condition (prédicat personnalisé)

List numbers = Lists.newArrayList(1, 2, 3, 6, 10, 34, 57, 89);
Predicate acceptEven = new Predicate() {
    @Override
    public boolean apply(Integer number) {
        return (number % 2) == 0;
    }
};
List evenNumbers = Lists.newArrayList(Collections2.filter(numbers, acceptEven));
Integer found = Collections.binarySearch(evenNumbers, 57);
assertThat(found, lessThan(0));

filtrer les valeurs nulles d'une collection

List withNulls = Lists.newArrayList("a", "bc", null, "def");
Iterable withoutNuls = Iterables.filter(withNulls, Predicates.notNull());
assertTrue(Iterables.all(withoutNuls, Predicates.notNull()));

vérifier la condition pour tous les éléments d'une collection

List evenNumbers = Lists.newArrayList(2, 6, 8, 10, 34, 90);
Predicate acceptEven = new Predicate() {
    @Override
    public boolean apply(Integer number) {
        return (number % 2) == 0;
    }
};
assertTrue(Iterables.all(evenNumbers, acceptEven));

nier un prédicat

List evenNumbers = Lists.newArrayList(2, 6, 8, 10, 34, 90);
Predicate acceptOdd = new Predicate() {
    @Override
    public boolean apply(Integer number) {
        return (number % 2) != 0;
    }
};
assertTrue(Iterables.all(evenNumbers, Predicates.not(acceptOdd)));

appliquer une fonction simple

List numbers = Lists.newArrayList(1, 2, 3);
List asStrings = Lists.transform(numbers, Functions.toStringFunction());
assertThat(asStrings, contains("1", "2", "3"));

trier la collection en appliquant d'abord une fonction intermédiaire

List numbers = Arrays.asList(2, 1, 11, 100, 8, 14);
Ordering ordering = Ordering.natural().onResultOf(Functions.toStringFunction());
List inAlphabeticalOrder = ordering.sortedCopy(numbers);
List correctAlphabeticalOrder = Lists.newArrayList(1, 100, 11, 14, 2, 8);
assertThat(correctAlphabeticalOrder, equalTo(inAlphabeticalOrder));


exemple complexe - chaîner des prédicats et des fonctions

List numbers = Arrays.asList(2, 1, 11, 100, 8, 14);
Predicate acceptEvenNumber = new Predicate() {
    @Override
    public boolean apply(Integer number) {
        return (number % 2) == 0;
    }
};
Function powerOfTwo = new Function() {
    @Override
    public Integer apply(Integer input) {
        return (int) Math.pow(input, 2);
    }
};

FluentIterable powerOfTwoOnlyForEvenNumbers =
FluentIterable.from(numbers).filter(acceptEvenNumber).transform(powerOfTwo);
assertThat(powerOfTwoOnlyForEvenNumbers, contains(4, 10000, 64, 196));

composer deux fonctions

List numbers = Arrays.asList(2, 3);
Function powerOfTwo = new Function() {
    @Override
    public Integer apply(Integer input) {
        return (int) Math.pow(input, 2);
    }
};
List result = Lists.transform(numbers,
    Functions.compose(powerOfTwo, powerOfTwo));
assertThat(result, contains(16, 81));

créer une carte appuyée par un ensemble et une fonction

Function powerOfTwo = new Function() {
    @Override
    public Integer apply(Integer input) {
        return (int) Math.pow(input, 2);
    }
};
Set lowNumbers = Sets.newHashSet(2, 3, 4);

Map numberToPowerOfTwoMuttable = Maps.asMap(lowNumbers, powerOfTwo);
Map numberToPowerOfTwoImuttable = Maps.toMap(lowNumbers, powerOfTwo);
assertThat(numberToPowerOfTwoMuttable.get(2), equalTo(4));
assertThat(numberToPowerOfTwoImuttable.get(2), equalTo(4));

créer une fonction à partir d'un prédicat

List numbers = Lists.newArrayList(1, 2, 3, 6);
Predicate acceptEvenNumber = new Predicate() {
    @Override
    public boolean apply(Integer number) {
        return (number % 2) == 0;
    }
};
Function isEventNumberFunction = Functions.forPredicate(acceptEvenNumber);
List areNumbersEven = Lists.transform(numbers, isEventNumberFunction);

assertThat(areNumbersEven, contains(false, true, false, true));

3. Plus de livres de cuisine sur la goyave

Guava est une bibliothèque complète et extrêmement utile. Voici quelques API supplémentaires couvertes sous forme de livre de recettes:

Prendre plaisir.

4. Conclusion

Ce format est un peu différent de mes tutoriels habituels - principalement parce que c'estan internal development cookbook que je garde et que j'utilise depuis un certain temps. L’objectif est d’avoir ces informations facilement accessibles en ligne et de les compléter chaque fois que je rencontre un nouvel exemple utile.

L'implémentation de tous ces exemples et extraits de codecan be found over on GitHub - il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.