欢迎访问宙启技术站
智能推送

Java中的函数式接口:Consumer、Function、Predicate和Supplier

发布时间:2023-06-21 09:16:04

Java 8以后,加入了函数接口(Functional Interface)这个概念,将Lambda表达式与函数式接口结合使用,有效地提高了Java代码的简洁性和可读性。其中,Consumer、Function、Predicate和Supplier是Java中最常用的四种函数式接口。

1. Consumer

Consumer接口表示一个接受单个输入参数并且没有返回值的操作。它可以用来消费Lambda表达式,接受一个参数,然后对这个参数进行处理。它的函数签名为:

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

其中,accept方法接受一个泛型对象T作为输入参数,没有返回值。下面是一个简单的示例:

public static void main(String[] args) {
    Consumer<Integer> consumer = x -> System.out.println(x);
    consumer.accept(10);
}

上面的代码中,我们通过Lambda表达式创建了一个Consumer对象,将其作为参数传递给accept方法,并输出了参数10。

2. Function

Function接口表示一个接受一个参数并返回结果的函数。它的泛型接口T是输入参数的类型,R是返回结果的类型。它的函数签名为:

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

其中,apply方法接受一个泛型对象T作为输入参数,返回一个泛型对象R作为输出结果。下面是一个简单的示例:

public static void main(String[] args) {
    Function<Integer, Integer> function = x -> x * x;
    System.out.println(function.apply(10));
}

上面的代码中,我们通过Lambda表达式创建了一个Function对象,将其作为参数传递给apply方法,并输出了参数10的平方值100。

3. Predicate

Predicate接口表示一个接受一个参数并返回一个布尔值的函数。它的泛型接口T是输入参数的类型。它的函数签名为:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

其中,test方法接受一个泛型对象T作为输入参数,返回一个布尔值作为输出结果。下面是一个简单的示例:

public static void main(String[] args) {
    Predicate<Integer> predicate = x -> x > 0;
    System.out.println(predicate.test(10));
}

上面的代码中,我们通过Lambda表达式创建了一个Predicate对象,将其作为参数传递给test方法,并判断参数是否大于0。

4. Supplier

Supplier接口表示一个无参数函数,返回一个值。它的泛型接口T是返回值的类型。它的函数签名为:

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

其中,get方法返回一个泛型对象T作为输出结果。下面是一个简单的示例:

public static void main(String[] args) {
    Supplier<Integer> supplier = () -> 10;
    System.out.println(supplier.get());
}

上面的代码中,我们通过Lambda表达式创建了一个Supplier对象,并输出其返回值10。

总结:

Consumer、Function、Predicate和Supplier是Java中最常用的四种函数式接口。它们分别表示一个接受单个输入参数并没有返回值的操作、一个接受一个参数并返回结果的函数、一个接受一个参数并返回一个布尔值的函数,以及一个无参数函数,返回一个值。通过Lambda表达式,我们可以很方便地创建它们的对象,并在代码中使用。这是Java 8以后的一个重要特性,可以提高代码的简洁性和可读性。