Version: Next
四大函数式接口
一些比较新的编程特性:Lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口
简化编程模型,在新版本的框架底层大量应用
例如
foreach(Consumer)
,参数就是一个消费者类的函数是接口
四大函数式接口:
Function
——函数型接口Predicate
——断定型接口Consumer
——消费型接口Supplier
——供给型接口
函数式接口 | 参数类型 | 返回类型 | 用途 |
---|---|---|---|
Consumer | T | 对类型为T的对象应用操作 void accept(T t) | |
Supplier | 无 | T | 返回类型为T的对象 T get() |
Function<T, R> | T | R | 对类型为T的对象应用操作,返回类型为R的对象 R apply(T t) |
Predicate | T | Boolean | 判断类型为T的对象是否满足约束,返回Boolean结果 Boolean test(T t) |
Function——函数型接口
- 源码
@FunctionalInterfacepublic 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());
}