四大函数式接口
简介
新时代程序员必须掌握:lambda 表达式、链式编程、函数式接口、Stream 流式计算
函数式接口:只有一个方法的接口,可以用来简化编程模型。
函数式接口可以被隐式转换为lambda表达式。
JDK 1.8 之前已有的函数式接口:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
JDK 1.8 新增加的函数接口:
- java.util.function
Java提供了@FunctionalInterface注解用于标记接口是函数式接口public class FunctionalInterfaceTest{};也可以不用标记
Function 函数型接口
Function 函数型接口
示例
@Test
public void test01(){
//方式一:匿名内部类
// Function<String,String> function=new Function<String, String>() {
// @Override
// public String apply(String s) {
// return s;
// }
// };
//方式二:函数式接口支持lambda表达式
Function<String,String> function = (str)->{
return str;
};
System.out.println(function.apply("dongjixue"));
}
//运行结果:dongjixue
Predicate 断定型接口
Predicate 断定型接口
示例
@Test
public void test02(){
Predicate<String> predicate = (str)->{
return str.isEmpty();
};
System.out.println(predicate.test("dongjixue"));
System.out.println(predicate.test(""));
}
//运行结果 false true
Suppier 供给型接口
Suppier 供给型接口
示例
@Test
public void test03(){
Supplier<String> supplier = ()->{
return "dongjixue";
};
System.out.println(supplier.get());
}
//运行结果:dongjixue
Consummer 消费型接口
Consummer 消费型接口
示例
@Test
public void test04(){
Consumer<String> consumer = (str)->{
System.out.println(str);
};
consumer.accept("dongjixue");
}
//运行结果:dongjixue
此函数式接口在foreach循环中用到过
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}