📜  Java .util。 Java中的函数.DoublePredicate接口与示例(1)

📅  最后修改于: 2023-12-03 15:01:28.043000             🧑  作者: Mango

Java.util中的函数DoublePredicate接口

在Java 8中引入了一个新的函数式接口 DoublePredicate ,用于断言操作,它接受一个double类型的参数并返回一个boolean类型的结果。

该接口定义如下:

@FunctionalInterface
public interface DoublePredicate {
    /**
     * 对给定的参数执行此操作并返回结果。
     *
     * @param value 要测试的值
     * @return 操作结果
     */
    boolean test(double value);

    /**
     * 返回此操作的组合操作,它对其输入执行此操作后对其结果执行其他操作。
     *
     * @param other 要应用于结果的操作
     * @return 组合操作
     * @throws NullPointerException 如果other为null,则抛出NullPointerException
     */
    default DoublePredicate and(DoublePredicate other) {
        Objects.requireNonNull(other);
        return (value) -> test(value) && other.test(value);
    }

    /**
     * 返回此操作的组合操作,它对其输入执行此操作后对其结果执行其他操作。
     *
     * @return 组合操作
     */
    default DoublePredicate negate() {
        return (value) -> !test(value);
    }

    /**
     * 返回此操作的组合操作,它对其输入执行此操作后对其结果执行其他操作。
     *
     * @param other 要应用于结果的操作
     * @return 组合操作
     * @throws NullPointerException 如果other为null,则抛出NullPointerException
     */
    default DoublePredicate or(DoublePredicate other) {
        Objects.requireNonNull(other);
        return (value) -> test(value) || other.test(value);
    }
}

该接口是在整个Java Collections Framework中广泛使用的新类型,常常用于传递方法引用到作为输入源的集合中的方法。例如,可以使用 DoubleStream 中的过滤器方法 filter(DoublePredicate) 来过滤一个 Double 类型值的流。

以下是一个简单的例子,演示如何使用 DoublePredicate 接口来过滤一个 Double 类型的值并打印出满足条件的值:

import java.util.function.DoublePredicate;
import java.util.stream.DoubleStream;

public class DoublePredicateExample {
    public static void main(String[] args) {
        DoubleStream stream = DoubleStream.of(1.0, 1.5, 2.0, 2.5, 3.0);

        DoublePredicate filter = value -> value > 2.0 && value < 3.0;

        stream.filter(filter)
                .forEach(System.out::println);
    }
}

输出结果为:

2.5

在这个例子中,我们定义了一个 DoublePredicate ,用于过滤值为 2.0 到 3.0 之间的值。然后,我们使用 filter(DoublePredicate) 方法过滤给定 DoubleStream 中的值,并打印出满足条件的值。

总之 DoublePredicate 提供了对 double 类型的值进行操作的灵活性,可以用于过滤 double 值的流、范围检查等操作。