📅  最后修改于: 2023-12-03 15:31:28.311000             🧑  作者: Mango
在Java 8中,Functional Interfaces(功能接口)成为了一个重要的概念。Functional Interfaces就是只有一个抽象方法的接口。
使用Functional Interfaces可以帮助我们:
Java 8中内置了很多Functional Interfaces,其中一些是因为它们在Java中用的很频繁,而其他一些则是因为它们支持Java中非常常见的编程模式。
在以下代码片段中,我们会看到Java 8中内置的Functional Interfaces:
public class FunctionalInterfacesExample {
// Predicate
static Predicate<String> startsWithLetterA = (s) -> s.startsWith("A");
// Consumer
static Consumer<String> printToConsole = (s) -> System.out.println(s);
// Function - takes String, returns Integer
static Function<String, Integer> lengthOfString = (s) -> s.length();
// Supplier
static Supplier<String> getString = () -> "Hello World!";
// UnaryOperator
static UnaryOperator<Integer> multiplyBy10 = (n) -> n * 10;
// BinaryOperator
static BinaryOperator<Integer> addTwoNumbers = (a, b) -> a + b;
}
由于Functional Interfaces只有一个抽象方法,因此我们可以非常方便地使用lambda表达式来实现它们。例如,我们可以使用以下代码来使用我们在前面定义的Functional Interfaces:
public class LambdaExpressionExample {
public static void main(String[] args) {
// Predicate
boolean startsWithA = startsWithLetterA.test("Apple");
// Consumer
printToConsole.accept("Hello World!");
// Function
int length = lengthOfString.apply("Java 8");
// Supplier
String str = getString.get();
// UnaryOperator
int result = multiplyBy10.apply(5);
// BinaryOperator
int sum = addTwoNumbers.apply(2, 3);
}
}
我们也可以定义自己的Functional Interfaces。例如,我们可以定义一个接口,它只有一个抽象方法,该方法接受两个参数并返回一个Boolean值:
@FunctionalInterface
public interface TwoElementPredicate<T> {
boolean compare(T element1, T element2);
}
我们可以很容易地使用lambda表达式来实现这个接口:
public class CustomFunctionalInterfaceExample {
public static void main(String[] args) {
TwoElementPredicate<String> compareLength = (s1, s2) -> s1.length() > s2.length();
boolean result = compareLength.compare("Java", "Programming");
}
}
Functional Interfaces是Java 8中非常重要的概念之一。它们简化了代码,使它们更加易读和易维护,并且支持使用lambda表达式。我们也可以定义自己的Functional Interfaces来满足我们的需求。