📅  最后修改于: 2023-12-03 15:15:54.859000             🧑  作者: Mango
Java 8 引入了一组新的函数式接口,称为功能接口(Functional Interface)。这些接口具有一个单一的功能,并且可以通过 Lambda 表达式来表示。这些接口可以被用在任何接受函数式接口作为参数的地方。
Java 8 提供了许多不同的功能接口,下面列举了一些常见的功能接口。
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 接口接受一个输入参数,返回一个结果。
@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 接口产生一个给定类型的结果。与 Function 不同的是,Supplier 没有输入参数。
@FunctionalInterface
public interface Supplier<T>
{
T get();
}
示例代码:
Supplier<String> supplier = () -> "hello world";
System.out.println(supplier.get()); // "hello world"
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 接口接受一个参数并返回与参数类型相同的结果。
@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 接口接受两个相同类型的参数,并返回一个相同类型的结果。
@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 在函数式编程方面更加灵活。在实际开发过程中,我们可以利用这些接口来实现更加优雅和简洁的代码。