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也大量使用了这些函数式接口。