Filtro de flujo de Java

Filtro de flujo de Java
Un ejemplo de una corriente es: lápiz, tinta, habitual, personas, gato. pastel, forestal

Si se va a filtrar esta corriente, para tener solo palabras cuya longitud es más de cinco caracteres, entonces el resultado sería:

lápiz, habitual, gente, forestal

Otro ejemplo de una transmisión es:

Perro, murciélago, nulo, campo, país, nulo, superposición

Si esta secuencia se filtra para que los valores nulos no estén presentes, entonces el resultado sería:

perro, murciélago, campo, país, superposición

Otro ejemplo más de una transmisión es:

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

Si esta secuencia se filtra para que el resultado no tenga ningún número menor o igual a 5, entonces el resultado sería:

6, 7, 8

Una transmisión es una secuencia de elementos. La fuente de la transmisión puede ser una matriz, una colección o entrada del disco o red duro. Filtrar una corriente significa eliminar ciertos elementos según algunos criterios. Dichos criterios, cuando se codifican, es una función, y se llama un predicado.

Contenido del artículo

  • Predicado
  • Algunas estructuras productoras de flujo
  • El método filtre ()
  • Conclusión

Predicado

Un predicado es una función que da como resultado verdadero o falso. Para la corriente,

lápiz, tinta, habitual, gente, gato, pastel, forestal

El predicado del filtro tiene solo palabras cuya longitud es mayor de 5, puede ser:

palabra -> palabra.longitud ()> 5

La palabra es una variable ficticia y representa cada palabra en el flujo. Una función como esta, con la flecha ->, se llama expresión de lambda. Esta función se interpreta como palabras cuyas longitudes son mayores de 5. El método de longitud de una clase de cadena devuelve la longitud de la cadena.

Las palabras se leen uno por uno, y para cada caso, si la longitud de la palabra es mayor que 5, toda esa expresión (de "palabra" a 5) daría como resultado verdadero; de lo contrario, toda la expresión daría lugar a falso.

Para la corriente,

Perro, murciélago, nulo, campo, país, nulo, superposición

El predicado del filtro para tener palabras no nulas puede ser:

palabra -> palabra != nulo

Esta expresión significa que la palabra abordada no es nula.

Para la corriente de enteros,

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

El predicado del filtro, no tener ningún número menor o igual a 5, es:

número -> número> = 6

donde el número se refiere a cada número (a su vez). Esto significa que cualquier número elegido debe ser mayor o igual a 6.

Al filtrar elementos de una transmisión, no solo la codificación de predicado tiene que saber el programador. El programador también tiene que saber qué estructuras producen una corriente y cómo se produce una corriente. La matriz o la colección es una fuente de flujo. No olvide que las operaciones de entrada/salida de la computadora también pueden producir una secuencia; Sin embargo, este artículo no aborda esto.

Algunas estructuras productoras de flujo

Formación

Las matrices son una clase destinada a manejar matrices. Los métodos de matrices toman una matriz real como uno de sus argumentos. Las matrices, como clase, tienen el siguiente método:

estática pública Lista Aslist (t ... a)

Este es un método estático, lo que significa que el objeto de matrices no está instanciado. Este método devuelve una lista. La lista puede considerarse como una transmisión sin filtro o filtrada, pero no es una corriente verdadera. Por ejemplo, en la siguiente declaración, LST producido a partir de una fuente sin procesar de enteros es como una corriente sin filtro:

Lista LST = matrices.Aslist (1, 2, 3, 4, 5, 6, 7, 8);

El objeto de la lista tiene un método para producir una transmisión sin filtro con los mismos elementos de lista, pero como flujo: ver a continuación.

Recopilación

Ejemplos de colecciones son ArrayList y Vector. La lista en sí es una colección de propósito general.

Lista de arreglo

ArrayList, como clase, tiene el siguiente método:

transmisión predeterminada arroyo()

Este método devuelve un objeto de transmisión. El siguiente segmento de código ilustra esto:

Lista de arreglo Al = nueva ArrayList();
Alabama.agregar ("perro"); Alabama.agregar ("murciélago"); Alabama.agregar (nulo); Alabama.Agregue campo");
Alabama.agregar ("país"); Alabama.agregar (nulo); Alabama.agregar ("superposición");
Arroyo stre = Al.arroyo();

Stre es una corriente sin filtro.

Lista

La lista es en realidad una interfaz; no es una clase. Sin embargo, su objeto puede ser devuelto por el método de matrices estáticas, aslist (), como se muestra arriba. El objeto de lista tiene el método stream (), que es como el del objeto ArrayList. El siguiente segmento de código muestra cómo el objeto de lista puede devolver una secuencia:

Vector VTR = nuevo vector();
VTR.agregar ("lápiz"); VTR.agregar ("tinta"); VTR.agregar ("habitual"); VTR.añadir personas");
VTR.agregar ("gato"); VTR.agregar ("pastel"); VTR.agregar ("forestal");
Lista LST = VTR.sublista (0, VTR.tamaño());
Arroyo stre = lst.arroyo();

El método de la lista aquí es devuelto por el método sublist () del vector.

Nota: La clase de matrices, la clase ArrayList, la clase Vector y la interfaz de la lista están en el Java.utilizar.* Paquete, que debe importarse. Sin embargo, la interfaz de transmisión está en el Java.utilizar.arroyo.* Paquete (minúscula 's'), que también debe importarse.

El método filtre ()

Entonces, una lista de matrices o un objeto de lista puede producir una secuencia utilizando sus métodos Stream (). ¿Qué puede producir un objeto de lista?? La clase de matrices y la clase vectorial pueden producir un objeto de lista. La clase de matrices usa su método aslist (), y la clase Vector usa su método Sublist ().

La transmisión es una interfaz y no una clase. El objeto de transmisión se devuelve mediante el método de transmisión del objeto de lista o el objeto ArrayList. El objeto de transmisión tiene el método filtre () para filtrar. Su argumento es el predicado. La nueva secuencia devuelta por el método de filtro es la secuencia filtrada.

El objeto de transmisión tiene muchos métodos. Dos de ellos son: count () y foreach (). El método Count () devuelve el número de elementos en la secuencia, y el método foreach () se utiliza para escanear los elementos de la secuencia.

El programa Java debería comenzar con:

importar java.utilizar.*;
importar java.utilizar.arroyo.*;

Filtrado para cuerdas mayores de una longitud

El siguiente código muestra cómo hacer esto:

Vector VTR = nuevo vector();
VTR.agregar ("lápiz"); VTR.agregar ("tinta"); VTR.agregar ("habitual"); VTR.añadir personas");
VTR.agregar ("gato"); VTR.agregar ("pastel"); VTR.agregar ("forestal");
Lista LST = VTR.sublista (0, VTR.tamaño());
Arroyo stre = lst.arroyo();
Arroyo strea = stre.Filtro (palabra -> palabra.longitud ()> 5);
strea.foreach (elemento -> sistema.afuera.imprimir (elemento + ""));
Sistema.afuera.println ();

El método foreach () tomó una función lambda, de la cual esta vez, no es un predicado. La salida filtrada es:

Lápiz Forestación

Filtrando los valores nulos

El siguiente código muestra cómo se puede hacer:

Lista de arreglo Al = nueva ArrayList();
Alabama.agregar ("perro"); Alabama.agregar ("murciélago"); Alabama.agregar (nulo); Alabama.Agregue campo");
Alabama.agregar ("país"); Alabama.agregar (nulo); Alabama.agregar ("superposición");
Arroyo stre = Al.arroyo();
Arroyo strea = stre.Filtro (palabra -> palabra != nulo);
strea.foreach (elemento -> sistema.afuera.imprimir (elemento + ""));
Sistema.afuera.println ();

La salida es:

Dog Bat Field Country Superposition

Filtrado para enteros más grandes

El siguiente código ilustra esto:

Lista LST = matrices.Aslist (1, 2, 3, 4, 5, 6, 7, 8);
Arroyo stre = lst.arroyo();
Arroyo strea = stre.filtro (número -> número> = 6);
strea.foreach (elemento -> sistema.afuera.imprimir (elemento + ""));
Sistema.afuera.println ();

La salida es:

6 7 8

Conclusión

La clase de matrices puede producir un objeto de lista con su método aslist (). La clase Vector puede producir un objeto de lista con su método Sublist (). La lista y los objetos ArrayList cada uno tiene el método stream (). El método de transmisión devuelve la transmisión sin filtro. El objeto de transmisión devuelto tiene el método Filter () que toma un predicado (criterios para el filtrado). El método de filtro devuelve la secuencia filtrada.