Java 8提供的标准函数式接口有哪些?

Java 8在java.util.function包下提供了许多常用的标准函数式接口。掌握这些接口的用法,是熟练使用Lambda表达式的关键。
主要接口如下:

  • Consumer:消费性接口,只有接受参数没有返回值。
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("Hello");
  • Supplier:供给性接口,没有接受参数,只有返回值。
Supplier<String> supplier = () -> "Hello"; 
String str = supplier.get();
  • Function:函数接口,有输入参数,也有返回值。
Function<String, Integer> function = x -> x.length();
int length = function.apply("Hello"); 
  • Predicate:断定性接口,有输入参数,返回boolean值。
Predicate<String> predicate = x -> x.length() > 5; 
boolean result = predicate.test("Hello");
  • UnaryOperator:一元运算符,继承自Function,输入输出类型相同。
UnaryOperator<Integer> operator = x -> x + 1;
int result = operator.apply(1);  
  • BinaryOperator:二元运算符,继承自BiFunction,输入输出类型相同。
BinaryOperator<Integer> operator = (x, y) -> x + y;  
int result = operator.apply(1, 2);

除此之外,还有BiConsumer、BiPredicate等接口。这些标准接口极大地简化了Lambda表达式的使用,我们可以直接传入相应的Lambda实现。