Zielony Smok - logo witryny

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

predicates.zip (klasy)