prega em java

Eu suponho que você está falando sobre com.google.common.base.Predicate<T> da goiaba.
da API:

determina um true ou false para uma determinada entrada. Por exemplo, um RegexPredicate pode implementar Predicate<String> e se torna verdadeira para qualquer string que corresponda à sua expressão regular dada.

Isto é essencialmente uma abstração OOP para um teste boolean.
Por exemplo, você pode ter um método de ajuda como este:

static boolean isEven(int num) { return (num % 2) == 0; // simple}

agora, dado a List<Integer> você pode processar apenas os pares de números assim:

 List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10); for (int number : numbers) { if (isEven(number)) { process(number); } }

com Predicate O if O teste é abstraído como um tipo. Isso permite que você interopere com o restante da API, como Iterables que possuem muitos métodos de utilidade que exigem Predicate. Ambos, agora você pode Escreva algo assim:

Por favor, agora que agora o loop de cada um é muito mais simples sem o teste if . Chegamos a um nível mais alto de abstração definindo Iterable<Integer> evenNumbers por filter -ing usando um Predicate.

links de API

  • Iterables.filter
    • retorna os elementos que atendem a um predicado.

Na função de pedido superior

Predicate permite Iterables.filter para servir como o que é chamado de função de ordem superior. Por si só, isso oferece muitas vantagens. Tome o exemplo List<Integer> numbers Anterior. Suponha que desejemos verificar se todos os números são positivos. Podemos escrever algo assim:

static boolean isAllPositive(Iterable<Integer> numbers) { for (int number : numbers) { if (number <= 0) { return false; } } return true;}//...if (isAllPositive(numbers)) { System.out.println("Yep!");}

com um Predicate e intervir com o resto das bibliotecas, nós Pode escrever isto:

Predicate<Integer> isPositive = new Predicate<Integer>() { @Override public boolean apply(Integer number) { return number > 0; } };//...if (Iterables.all(numbers, isPositive)) { System.out.println("Yep!");}

Espero que agora você possa ver o valor em maiores abstrações para rotinas, como “filtrar todos os elementos pelo predicado”, “, Se todos os elementos satisfarem o predicado dado “, etc. Eles fazem um código melhor. Infelizmente, o Java não possui métodos de primeira classe: você não pode passar métodos em torno de Iterables.filter e Iterables.all. Você pode, claro, passar objetos em Java. Portanto, o Predicate é definido e os objetos são passados implementando essa interface.

veja também

  • wikipedia / superior Função de pedido
  • wikipedia / filtro (função superior)

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *