Version: Next

四大函数式接口

一些比较新的编程特性:Lambda表达式、链式编程、函数式接口、Stream流式计算

函数式接口:只有一个方法的接口

简化编程模型,在新版本的框架底层大量应用

例如foreach(Consumer),参数就是一个消费者类的函数是接口

四大函数式接口:

  1. Function——函数型接口
  2. Predicate——断定型接口
  3. Consumer——消费型接口
  4. Supplier——供给型接口
函数式接口参数类型返回类型用途
ConsumerT对类型为T的对象应用操作 void accept(T t)
SupplierT返回类型为T的对象 T get()
Function<T, R>TR对类型为T的对象应用操作,返回类型为R的对象 R apply(T t)
PredicateTBoolean判断类型为T的对象是否满足约束,返回Boolean结果 Boolean test(T t)

Function——函数型接口

  • 源码
@FunctionalInterface
public interface Function<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
...
  • 即,传入一个参数T,返回一个R
  • apply(T t)

new Function()即是匿名内部类的写法

@Test
public void testFunction() {
Function function = new Function<String, String>() {
@Override
public String apply(String str) {
return str;
}
};
Object apply = function.apply("AAA");
System.out.println(apply);
}

Lambda表达式写法

@Test
public void testLambda() {
Function function = (str) -> {
return str + "回来了";
};
System.out.println(function.apply("A"));
}

Predicate——断定型接口

  • 只有一个输入参数
  • test()方法
  • 返回一个Boolean
@Test
public void testPredicate() {
Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String str) {
return str.isEmpty();
}
};
System.out.println(predicate.test(""));
}

Lambda表达式实现

@Test
public void testPredicateLambda() {
Predicate<String> predicate = (str) -> {
return str.isEmpty();
};
System.out.println(predicate.test(""));
}

Consumer——消费型接口

  • 一个输入参数
  • 没有返回值
  • accept()
@Test
public void consumer() {
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
consumer.accept("打印我");
}

Lambda表达式

@Test
public void consumerLambda() {
Consumer<String> consumer = (str)->{
System.out.println(str);
};
consumer.accept("打印我!");
}

Supplier——供给型接口

  • 没有输入参数
  • 只有返回参数
  • get()
@Test
public void testSupplier() {
Supplier<String> supplier = new Supplier<String>() {
@Override
public String get() {
return "返回我";
}
};
System.out.println(supplier.get());
}

Lambda表达式

@Test
public void testSupplierLambda() {
Supplier supplier = () -> {
return "打印我 lambda";
};
System.out.println(supplier.get());
}