Filtrul de flux Java și predicate

Java flux Opțiunile de filtrare sunt foarte largi, dar pentru a lucra cu ei confortabil, trebuie să înțelegi funcționarea interfeței de predicare în detaliu. Vom construi un exemplu cu o listă de cărți care ne permite să înțelegem mai bine modul în care funcționează filtrele. Pentru acest lucru mergem de la următoarele obiecte.

iv id id = „0676128077”

iv id = „2BF8287028 „

div id =” e10b010734 „

Avem patru cărți și tocmai am folosit un filtru simplu care ne selectează cărțile care trec de la 1000 de pagini utilizând un predicat cu o expresie lambda. Rezultatul este tipărit pe consola.

DIV id = „2783E9CF80″>

Java stream filtru

Filtru flux Java

Filtrul funcționează corect, dar nu vrem întotdeauna să filtrați folosind o expresie lambda într-un mod direct, deoarece nu are o capacitate mare de reutilizare. În multe cazuri, de obicei, este mai bine să aveți un fel de sprijin care să definească o serie de expresii de lambda și predicate care ne ajută și sunt reutilizate.

divid id = „2783E9CF80″>

Diagrama filtrului Java Stream

hai să vedem câteva exemple.

DIV id =” 968BC082B3 „>

În acest fel putem să putem reutiliza expresia și să filtrum de categoria pe care o dorim:

lista.stream().filter(LibroUtils.filtroCategoria("ciencia ficcion")).map(libro - > libro.getTitulo()).forEach(System.out::println);

oricât de obicei în multe cazuri este Generați expresii funcționale complexe și apoi le flirtați prin metode de referință. De exemplu, ceva asemănător următoarei expresii.

package com.arquitecturajava;import java.util.function.Predicate;public class LibroUtils { public static Predicate < Libro > filtroCategoria(String categoria) { return (Libro l) - > { return l.getCategoria().equals(categoria); }; } public static boolean buenosLibros(Libro libro) { Predicate < Libro > p1 = (Libro l) - > l.getCategoria().equals("ciencia ficcion"); Predicate < Libro > p2 = (Libro l) - > l.getCategoria().equals("fantasia"); Predicate < Libro > p3 = (Libro l) - > l.getPaginas() > 1000; Predicate < Libro > ptotal = p1.or(p2).and(p3); return ptotal.test(libro); }}

În acest fel putem invoca acest tip de filtru și reutilizați-l.

lista .stream() .filter(LibroUtils::buenosLibros) .map(Libro::getTitulo) .forEach(System.out::println);

Rezultatul este:

divid id = „2783E9CF80″>

Java stream filtru rezultat

Folosim doar filtrul de flux Java și opțiunile sale.

Alte articole similare:

  1. java prediced interfață și metodele tale
  2. Java Sweam Seach și colecții
  3. Java 8 expresii lambda (i)
  4. Oracle Java Lambda

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *