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
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.