Java中常用的函数式接口
在Java中,函数式接口(Functional Interface)是一种只有一个抽象方法的接口。Java 8引入了函数式接口和Lambda表达式,使得编写简洁、易读的代码成为可能。Java中常用的函数式接口包括:
Runnable
:这是一个老牌的函数式接口,通常用于表示不返回结果并且可以抛出异常的任务。它只有一个run
方法。
@FunctionalInterface
public interface Runnable {public abstract void run();
}
Callable
:与Runnable
类似,但是Callable
允许返回一个结果,并且可以抛出异常。它有一个call
方法。
@FunctionalInterface
public interface Callable<V> {V call() throws Exception;
}
Consumer
:表示接受一个输入参数并且不返回结果的操作。它有一个accept
方法。
@FunctionalInterface
public interface Consumer<T> {void accept(T t);
}
Supplier
:表示提供(生成)一个结果的操作,不接受任何输入参数。它有一个get
方法。
@FunctionalInterface
public interface Supplier<T> {T get();
}
Function
:表示接受一个输入参数并返回一个结果的操作。它有一个apply
方法。
@FunctionalInterface
public interface Function<T, R> {R apply(T t);
}
Predicate
:表示一个返回布尔值的函数,通常用于测试或过滤元素。它有一个test
方法。
@FunctionalInterface
public interface Predicate<T> {boolean test(T t);
}
BiFunction
:表示接受两个输入参数并返回一个结果的操作。它有一个apply
方法。
@FunctionalInterface
public interface BiFunction<T, U, R> {R apply(T t, U u);
}
BiConsumer
:表示接受两个输入参数并且不返回结果的操作。它有一个accept
方法。
@FunctionalInterface
public interface BiConsumer<T, U> {void accept(T t, U u);
}
BiPredicate
:表示接受两个输入参数并返回一个布尔值的函数。它有一个test
方法。
@FunctionalInterface
public interface BiPredicate<T, U> {boolean test(T t, U u);
}
UnaryOperator
:这是一个特殊的Function
,它的输入和输出类型相同。
@FunctionalInterface
public interface UnaryOperator<T> extends Function<T,T> {static <T> UnaryOperator<T> identity() { ... }
}
这些函数式接口在Java 8中引入,主要用于支持Lambda表达式和方法引用,使得函数式编程在Java中变得更加容易和直观。此外,Java的Stream API也大量使用了这些函数式接口。