一、什麼是函數式接口
只包含一個抽象方法的接口,稱爲 函數式接口 。
我們可以在一個接口上使用 FunctionalInterface 註解,這樣做可以檢查它是否是一個函數式接口。同時 javadoc 也會包含一條聲明,說明這個接口是一個函數式接口。
自定義函數式接口:
/**
* 自定義函數式接口
*/
@FunctionalInterface
public interface MyInterface {
void method1();
// void method2();
}
在Java8的java.util.function包下定義了很多函數式接口
以下內容供瞭解
二、Java內置四大核心函數式接口:
1、消費型接口 Consumer<T> void accept(T t)
//消費型接口
@Test
public void test1(){
happyTime(500, new Consumer<Double>() {
@Override
public void accept(Double aDouble) {
System.out.println("買了1件衣服,價格爲:" + aDouble);
}
});
System.out.println("*********分隔符***********");
//lambda寫法
happyTime(400,money -> System.out.println("買了1件衣服,價格爲:" + money));
}
public void happyTime(double money, Consumer<Double> con){
con.accept(money);
}
2、供給型接口 Supplier<T> T get()
3、函數型接口 Function<T,R> R apply(T t)
4、斷定型接口 Predicate<T> boolean test(T t)
//斷定型接口 Predicate<T> boolean test(T t)
@Test
public void test2(){
List<String> list = Arrays.asList("北京","南京","天津","東京","西京","普京");
List<String> filterStrs = filterString(list, new Predicate<String>() {
@Override
public boolean test(String s) {
return s.contains("京");
}
});
System.out.println(filterStrs);
System.out.println("*********分隔符*********");
//lambda寫法
List<String> filterStrs1 = filterString(list,s -> s.contains("京"));
System.out.println(filterStrs1);
}
//根據給定的規則,過濾集合中的字符串。此規則由Predicate的方法決定
public List<String> filterString(List<String> list, Predicate<String> pre){
ArrayList<String> filterList = new ArrayList<>();
for(String s : list){
if(pre.test(s)){
filterList.add(s);
}
}
return filterList;
}
三、其他接口