Рубрики
Без рубрики

Предикат Java – Предикат Java 8

Предикат Java, Предикат Java 8, Пример предиката Java, фильтр предикатов Java и, или, отрицание, равнозначно, тест предиката Java, Пример предиката Java 8.

Автор оригинала: Pankaj Kumar.

В этой статье мы поговорим о Предикате Java, который представляет собой функциональный интерфейс . Функциональный интерфейс-это интерфейс, содержащий ровно один абстрактный метод.

Предикат Java

В Java 8, java.util.функция.Был введен предикат , который ведет себя аналогичным образом и может использоваться в качестве цели назначения в лямбда-выражениях и функциональных интерфейсах. Функциональным методом Предиката является тест(объект) .

Пример предиката Java

Давайте рассмотрим, что у нас есть класс Apple :

package com.journaldev.predicates;

public class Apple {
	private String color;
	private Double weight;

	public Apple(String c, Double w) {
		this.color = c;
		this.weight = w;
	}

	@Override
	public String toString() {
		return "Apple{color:" + this.getColor() + ",weight:" + this.getWeight() + "}";
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public Double getWeight() {
		return weight;
	}

	public void setWeight(Double weight) {
		this.weight = weight;
	}
}

Теперь, если у нас есть условие, чтобы получить яблоки, вес которых превышает 150 граммов, мы можем написать для него предикат, как показано ниже:

package com.journaldev.predicates;

import java.util.function.Predicate;

public class ApplePredicates {

	public static Predicate isWeightAbove150() {
		return apple -> apple.getWeight() >= 150;
	}
}

Теперь мы можем использовать этот предикат в filter () , чтобы отфильтровать список яблок по условию в этом предикате.

Давайте добавим метод filter Applies() к классу Предикатов Apple :

public static List filterApples(List apples, Predicate predicate) {
	return apples.stream().filter(predicate).collect(Collectors.toList());
}

Мы можем вызвать это и получить результаты, как показано ниже, в основном методе:

public static void main(String[] args) {
	List apples = Arrays.asList(new Apple("green", 120.0), new Apple("red", 110.0),
			new Apple("brown", 150.0), new Apple("green", 160.0), new Apple("red", 122.0));
	ApplePredicates.filterApples(apples, ApplePredicates.isWeightAbove150()).forEach(System.out::println);
}

Выход:

Apple{color:brown,weight:150.0}
Apple{color:green,weight:160.0}

С помощью лямбда-выражений java 8 мы можем сделать это просто, как показано ниже:

ApplePredicates.filterApples(apples, apple -> {
	return apple.getWeight() >= 150;
}).forEach(System.out::println);

Или, если мы не хотим определять ваш собственный метод, мы также можем использовать метод фильтра по умолчанию и записать его как:

apples.stream().filter(apple -> {
	return apple.getWeight() >= 150;
}).collect(Collectors.toList()).forEach(System.out::println);

Методы предикатов Java 8

Давайте теперь рассмотрим методы, доступные для Предиката :

  1. Предикат по умолчанию и(Предикат другой)

    Возвращает составленный предикат, представляющий логическое И из двух предикатов. При оценке составленного предиката, если этот предикат является ложным, то другой предикат не оценивается.

    Чтобы понять это, давайте добавим еще один предикат в класс Предикаты Apple :

    Теперь мы можем применить функцию и () , если хотим получить предикат, чтобы яблоко было зеленым и весило больше или равно 150 граммам.

    Это даст следующий результат:

    Аналогично, у нас есть или() метод для выполнения короткого замыкания, логического упорядочения двух предикатов.

  2. Предикат по умолчанию отрицает()

    Возвращает предикат, представляющий логическое отрицание этого предиката.

    Допустим, мы хотим, чтобы Предикат получал яблоки, которые не являются зелеными. У нас уже есть один предикат, который проверяет, чтобы яблоко было зеленым, поэтому мы можем его отрицать.

    Результатом будет:

  3. логический тест(T t)

    Оценивает этот предикат для данного аргумента. В нашем случае мы можем передать объект Apple, чтобы проверить, возвращает ли этот предикат значение true или false для этого яблока.

    Выход:

  4. статический предикат равен(объект targetRef)

    Возвращает предикат, который проверяет, равны ли два аргумента в соответствии с методом Objects.equals () .

    Считайте, что мы переопределили метод equals() для класса Apple:

    Теперь предположим, что у нас есть яблоко, которое имеет стандартный цвет и вес. Затем мы можем получить предикат, который проверит, является ли данное яблоко стандартным или нет.

    Это выведет:

Вот и все для функционального интерфейса предикатов Java.

Ссылка: API Doc