Filtro de fluxo Java

Filtro de fluxo Java
Um exemplo de fluxo é: lápis, tinta, habitual, pessoas, gato. Bolo, silvicultura

Se esse fluxo for filtrado, para ter o resultado de apenas palavras cujo comprimento é superior a cinco caracteres, o resultado seria:

Lápis, costume, pessoas, silvicultura

Outro exemplo de fluxo é:

cachorro, morcego, nulo, campo, país, nulo, superposição

Se esse fluxo for filtrado para que os valores nulos não estejam presentes, o resultado seria:

cachorro, morcego, campo, país, superposição

Mais um exemplo de fluxo é:

1, 2, 3, 4, 5, 6, 7, 8

Se esse fluxo for filtrado para que o resultado não tenha nenhum número menor ou igual a 5, o resultado seria:

6, 7, 8

Um fluxo é uma sequência de elementos. A fonte do fluxo pode ser uma matriz, uma coleção ou entrada do disco rígido ou rede. Filtrar um fluxo significa eliminar certos elementos com base em alguns critérios. Esses critérios, quando codificados, são uma função e é chamado de predicado.

Conteúdo do artigo

  • Predicado
  • Algumas estruturas de produção de fluxo
  • O método filtro ()
  • Conclusão

Predicado

Um predicado é uma função que resulta em verdadeiro ou falso. Para o fluxo,

Lápis, tinta, habitual, pessoas, gato, bolo, silvicultura

O predicado do filtro para ter apenas palavras cujo comprimento é maior que 5, pode ser:

palavra -> palavra.comprimento ()> 5

Word é uma variável dummy e representa cada palavra no fluxo. Uma função como essa, com a seta ->, é chamada de expressão de lambda. Esta função é interpretada como palavras cujos comprimentos são maiores que 5. O método de comprimento de uma classe de string retorna o comprimento da string.

As palavras são lidas um a um e, para cada caso, se o comprimento da palavra for maior que 5, toda essa expressão (de “palavra” a 5) resultaria em verdadeiro; Caso contrário, toda a expressão resultaria em falso.

Para o fluxo,

cachorro, morcego, nulo, campo, país, nulo, superposição

O predicado do filtro para ter palavras não nulas pode ser:

palavra -> palavra != nulo

Esta expressão significa que a palavra abordada não é nula.

Para o fluxo de números inteiros,

1, 2, 3, 4, 5, 6, 7, 8

O predicado do filtro, para não ter nenhum número menor ou igual a 5, é:

Número -> Número> = 6

onde o número se refere a cada número (por sua vez). Isso significa que qualquer número escolhido deve ser maior ou igual a 6.

Ao filtrar elementos de um fluxo, não é apenas o predicado codificação que o programador precisa saber. O programador também precisa saber quais estruturas produzem um fluxo e como um fluxo é produzido. Array ou coleção é uma fonte de um fluxo. Não esqueça que as operações de entrada/saída de computador também podem produzir um fluxo; No entanto, este artigo não aborda isso.

Algumas estruturas de produção de fluxo

Variedade

Matrizes são uma aula destinada a lidar com matrizes. Os métodos de matrizes tomam uma matriz real como um de seus argumentos. Matrizes, como classe, tem o seguinte método:

estática pública Lista aslist (t… a)

Este é um método estático, o que significa que o objeto de matrizes não é instanciado. Este método retorna uma lista. A lista pode ser considerada como um fluxo não filtrado ou filtrado, mas não é um fluxo verdadeiro. Por exemplo, na declaração a seguir, o LST produzido a partir de uma fonte bruta de números inteiros é como um fluxo não filtrado:

Lista lst = matrizes.aslist (1, 2, 3, 4, 5, 6, 7, 8);

O objeto da lista tem um método para produzir um fluxo não filtrado com os mesmos elementos da lista, mas como um fluxo - veja abaixo.

Coleção

Exemplos de coleções são Arraylist e Vector. A lista em si é uma coleção de uso geral.

Arraylist

Arraylist, como classe, tem o seguinte método:

fluxo padrão fluxo()

Este método retorna um objeto de fluxo. O seguinte segmento de código ilustra o seguinte:

Arraylist AL = novo Arraylist();
al.add ("cachorro"); al.add ("morcego"); al.add (nulo); al.adicionar campo");
al.add ("country"); al.add (nulo); al.add ("superposição");
Fluxo stre = al.fluxo();

Stre é um riacho não filtrado.

Lista

A lista é na verdade uma interface; não é uma aula. No entanto, seu objeto pode ser retornado pelo método estático, aslist (), como mostrado acima. O objeto da lista possui o método Stream (), que é como o do objeto ArrayList. O segmento de código a seguir mostra como o objeto da lista pode retornar um fluxo:

Vetor vtr = novo vetor();
vtr.add ("lápis"); vtr.add ("tinta"); vtr.add ("habitual"); vtr.adicionar pessoas");
vtr.add ("gato"); vtr.add ("bolo"); vtr.add ("silvicultura");
Lista lst = vtr.sublista (0, VTR.tamanho());
Fluxo stre = lst.fluxo();

O objeto da lista aqui é retornado pelo método sublist () do vetor.

Nota: A classe Matriz, a classe Arraylist, a classe vetorial e a interface da lista estão no Java.util.* pacote, que deve ser importado. No entanto, a interface do fluxo está no java.util.fluxo.* pacote (minúsculo 's'), que também deve ser importado.

O método filtro ()

Portanto, um objeto Arraylist ou List pode produzir um fluxo usando seus métodos de fluxo (). O que pode produzir um objeto de lista? A classe Matriz e a classe vetorial podem produzir um objeto de lista. A classe Matriz usa seu método aslist (), e a classe vetorial usa seu método sublist ().

O fluxo é uma interface e não uma classe. O objeto de fluxo é retornado pelo método do fluxo do objeto Lista ou objeto ArrayList. O objeto de fluxo possui o método filtro () para filtrar. Seu argumento é o predicado. O novo fluxo retornado pelo método do filtro é o fluxo filtrado.

O objeto de fluxo tem muitos métodos. Dois deles são: count () e foreach (). O método count () retorna o número de elementos no fluxo, e o método foreach () é usado para digitalizar os elementos do fluxo.

O programa Java deve começar com:

importar java.util.*;
importar java.util.fluxo.*;

Filtragem para cordas maiores que um comprimento

O código a seguir mostra como fazer isso:

Vetor vtr = novo vetor();
vtr.add ("lápis"); vtr.add ("tinta"); vtr.add ("habitual"); vtr.adicionar pessoas");
vtr.add ("gato"); vtr.add ("bolo"); vtr.add ("silvicultura");
Lista lst = vtr.sublista (0, VTR.tamanho());
Fluxo stre = lst.fluxo();
Fluxo strea = stre.filtro (palavra -> palavra.comprimento ()> 5);
strea.foreach (elemento -> sistema.fora.impressão (elemento + ""));
Sistema.fora.println ();

O método foreach () adotou uma função lambda, da qual desta vez, não é um predicado. A saída filtrada é:

Lápis habitual pessoas florestas

Filtrando valores nulos

O código a seguir mostra como pode ser feito:

Arraylist AL = novo Arraylist();
al.add ("cachorro"); al.add ("morcego"); al.add (nulo); al.adicionar campo");
al.add ("country"); al.add (nulo); al.add ("superposição");
Fluxo stre = al.fluxo();
Fluxo strea = stre.filtro (palavra -> palavra != nulo);
strea.foreach (elemento -> sistema.fora.impressão (elemento + ""));
Sistema.fora.println ();

A saída é:

Superposição do país de campo de Bat Field

Filtragem para números inteiros maiores

O código a seguir ilustra o seguinte:

Lista lst = matrizes.aslist (1, 2, 3, 4, 5, 6, 7, 8);
Fluxo stre = lst.fluxo();
Fluxo strea = stre.filtro (número -> número> = 6);
strea.foreach (elemento -> sistema.fora.impressão (elemento + ""));
Sistema.fora.println ();

A saída é:

6 7 8

Conclusão

A classe Matriz pode produzir um objeto de lista com seu método aslist (). A classe vetorial pode produzir um objeto de lista com seu método sublist (). Os objetos da lista e da ArrayList têm o método Stream (). O método do fluxo retorna o fluxo não filtrado. O objeto de fluxo retornado possui o método filtro () que leva um predicado (critérios para filtragem). O método do filtro retorna o fluxo filtrado.