Livro de receitas funcional da goiaba

Livro de receitas funcional da goiaba

1. Visão geral

Este livro de receitas está organizado emsmall and focused recipes and code snippets para usar os elementos de estilo funcional Guava - Predicados e Funções.

Ocookbook format é focado e prático - sem detalhes estranhos e explicações necessárias.

2. The Cookbook

filtrar uma coleção por uma condição (predicado personalizado)

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));

filtrar nulos de uma coleção

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

verificar condição para todos os elementos de uma coleção

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));

negar um predicado

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)));

aplique uma função simples

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

classificar coleção aplicando primeiro uma função intermediária

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));


exemplo complexo - encadeando predicados e funções

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));

compor duas funções

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));

criar um mapa apoiado por um conjunto e uma função

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));

criar uma função a partir de um predicado

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. Mais livros de receitas de goiaba

Guava é uma biblioteca abrangente e fantasticamente útil - aqui estão mais algumas APIs abordadas na forma de livro de receitas:

Desfrutar.

4. Conclusão

Este formato é um pouco diferente dos meus tutoriais habituais - principalmente porque se trata dean internal development cookbook que mantenho e utilizo há algum tempo. O objetivo é ter essas informações prontamente disponíveis on-line - e adicioná-las sempre que encontrar um novo exemplo útil.

A implementação de todos esses exemplos e trechos de códigocan be found over on GitHub - este é um projeto baseado em Maven, portanto, deve ser fácil de importar e executar como está.