📜  Java 8 功能接口 - Java (1)

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

Java 8 功能接口

Java 8 引入了一组新的函数式接口,称为功能接口(Functional Interface)。这些接口具有一个单一的功能,并且可以通过 Lambda 表达式来表示。这些接口可以被用在任何接受函数式接口作为参数的地方。

常见功能接口

Java 8 提供了许多不同的功能接口,下面列举了一些常见的功能接口。

Predicate<T>

Predicate 接口接受一个输入参数,返回一个布尔值表示是否满足某些特定的条件。

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

示例代码:

Predicate<String> predicate = s -> s.length() > 0;

System.out.println(predicate.test("foo")); // true
System.out.println(predicate.test("")); // false
Function<T, R>

Function 接口接受一个输入参数,返回一个结果。

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

示例代码:

Function<String, Integer> toInteger = s -> Integer.valueOf(s);
Function<String, String> backToString = toInteger.andThen(String::valueOf);

System.out.println(toInteger.apply("123")); // 123
System.out.println(backToString.apply("123")); // "123"
Supplier<T>

Supplier 接口产生一个给定类型的结果。与 Function 不同的是,Supplier 没有输入参数。

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

示例代码:

Supplier<String> supplier = () -> "hello world";

System.out.println(supplier.get()); // "hello world"
Consumer<T>

Consumer 接口接受一个输入参数,不返回任何结果。

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

示例代码:

Consumer<String> consumer = s -> System.out.println(s);

consumer.accept("hello world"); // 输出 "hello world"
UnaryOperator<T>

UnaryOperator 接口接受一个参数并返回与参数类型相同的结果。

@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T>

示例代码:

UnaryOperator<String> unaryOperator = s -> s.toUpperCase();

System.out.println(unaryOperator.apply("hello world")); // "HELLO WORLD"
BinaryOperator<T>

BinaryOperator 接口接受两个相同类型的参数,并返回一个相同类型的结果。

@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T>

示例代码:

BinaryOperator<Integer> binaryOperator = (a, b) -> a * b;

System.out.println(binaryOperator.apply(3, 5)); // 15
总结

Java 8 中的功能接口是一种非常强大的抽象,可以使 Java 在函数式编程方面更加灵活。在实际开发过程中,我们可以利用这些接口来实现更加优雅和简洁的代码。