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 = „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″>
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″>
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″>
Folosim doar filtrul de flux Java și opțiunile sale.
Alte articole similare:
- java prediced interfață și metodele tale
- Java Sweam Seach și colecții
- Java 8 expresii lambda (i)
- Oracle Java Lambda