Użycie warunku
Metoda filter
przyjmuje predykat IntPredicate
, który jest warunkiem użytym przy filtrowaniu danych. Gdy chcemy przepuścić przez filtr tylko liczby nieparzyste możemy użyć warunku (predicates.Predicate1.java):
// tablica losowo wybranych intów int[] tabl = new int[20]; int i; for (i = 0; i < tabl.length; i++) { tabl[i] = IMath.randomInRange(1, 10); } System.out.println(); IntStream.of(tabl).filter(value -> value % 2 == 1).forEach(value -> System.out.print(value + " "));
Warunek ten możemy też zapisać tak (predicates.Predicate2.java):
IntPredicate ip = value -> value % 2 == 1; IntStream.of(tabl).filter(ip).forEach(value -> System.out.print(value + " "));
Tworzenie klasy
Możemy utworzyć klasę warunku (predicates.Odd.java):
package predicates; import java.util.function.IntPredicate; public class Odd implements IntPredicate { @Override public boolean test(int value) { return value % 2 == 1; } }
a następnie użyć tej klasy (predicates.Predicate3.java):
IntPredicate ip = new Odd(); IntStream.of(tabl).filter(ip).forEach(value -> System.out.print(value + " ")); //IntStream.of(tabl).filter(new Odd()).forEach(value -> //System.out.print(value + " "));
Łączenie warunków
Warunki możemy łączyć. Załóżmy, że chcemy przefiltrować dane tak, aby uzyskać wyłącznie liczby parzyste, które są większe od siedem albo mniejsze od 3. Taki warunek możemy zapisać następująco (predicates.Predicate4.java):
// tablica losowo wybranych intów int[] tabl = new int[20]; int i; for (i = 0; i < tabl.length; i++) { tabl[i] = IMath.randomInRange(1, 10); } IntStream.of(tabl).filter(value -> (value % 2 == 0) && ((value > 7) || (value < 3))) .forEach(value -> System.out.print(value + " "));
Zestawienie warunków może też wyglądać tak (predicates.predicate4.java):
System.out.println(); IntPredicate ip1 = value -> (value % 2 == 0); IntPredicate ip2 = value -> value > 7; IntPredicate ip3 = value -> value < 3; IntPredicate ip4 = ip1.and(ip2.or(ip3)); IntStream.of(tabl).filter(ip4).forEach(value -> System.out.print(value + " "));
Pliki do ściągnięcia