本文目錄:
1、什麼是函數式接口?
2、自定義函數式接口
3、作爲參數傳遞的Lanbda表達式
4、java內置四大核心函數式接口
5、其他接口
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
什麼是函數式接口?
1)只包含一個抽象方法的接口,稱爲函數式接口。
2)可以通過Lambda表達式來創建該接口的對象(若Lambda表達式拋出一個受檢異常,那麼該異常需要在目標接口的抽象方法上進行聲明)。
3)我們可以在任意函數式接口上使用@FunctionalInterface註釋,這樣做可以檢查它是否是一個函數式接口,同時javadoc也會包含一條聲明,說明這個接口是一個函數式接口。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
自定義函數式接口
@FunctionalInterface
public interface MyFunction {
public String getValue(String str);
}
函數式接口中使用泛型
@FunctionalInterface
public interface MyFunction2<T,R> {
public R getValue2(T t,T T2);
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
作爲參數傳遞Lambda表達式:
作爲參數傳遞給Lambda表達式:爲了將Lambda表達式作爲參數傳遞,接收Lambda表達式的參數類型必須是與該Lambda表達式兼容的函數式接口類型
@Test
public void test2(){
// 去除字符串首尾空格
String s = strHandler("\t\t\t\t\t大夫", (str) -> str.trim());
System.out.println(s);
// 把小寫字母變成大寫
String upper = strHandler("adsaff",(str -> str.toUpperCase()));
System.out.println(upper);
// 截取字符串 按下標 從0開始
String s1 = strHandler("滿意點個贊,謝謝", (str) -> str.substring(1,4));
System.out.println(s1);
}
public String strHandler(String str,MyFunction mf){
return mf.getValue(str);
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JAVA內置四大核心函數式接口
* java8 內置的四大核心接口
* Consumer<T>:消費性接口
* void accept(T t);
* Supplier<T>:供給型接口
* T get();
* Function<T,R>: 函數型接口
* R apply(T t);
* Predicate<T> : 斷言型接口
* boolean test(T t);
1、Consumer<T>:消費性接口 傳進一個參數 然後對該參數進行操作 沒有返回值 操作了也就純操作
void accept(T t);
@Test
public void run() {
happy(10000, (m) -> System.out.println("消費了" + m + "元"));
}
public void happy(double money, Consumer<Double> consumer) {
consumer.accept(money);
}
2、Supplier<T>:供給型接口 用於給你產生一些對象 你可以指定你要產生的對象類型
void accept(T t);
@Test
public void run2() {
List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
for (Integer integer : numList) {
System.out.println(integer);
}
}
//需求:產生指定個數的整數,並放入集合中
public List<Integer> getNumList(int num, Supplier<Integer> supplier) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
Integer n = supplier.get();
list.add(n);
}
return list;
}
3、Function<T,R>函數型接口:傳進去一個傳參數,返回一個參數,可以通過定義泛型對其類型進行操作
R apply(T t);
@Test
public void run3(){
//去除首尾空格
String s = strHandler("\t\t\t\t 九點三公分課程", (str) -> str.trim());
System.out.println(s);
//截取字符串
String s1 = strHandler("九點三公分課程", (str) -> str.substring(1, 5));
System.out.println(s1);
}
//需求:用於處理字符串
public String strHandler(String str, Function<String, String> function) {
return function.apply(str);
}
4、Predicate<T>: 斷言型接口 用於一些做一些判斷型操作
boolean test(T t);
@Test
public void run4(){
List<String> list = Arrays.asList("action","string","char","shore");
List<String> strings = filterStr(list, (s) -> s.length() > 5);
for (String s:strings) {
System.out.println(s);
}
}
//需求:將滿足條件的字符串放入集合中
public List<String> filterStr(List<String> list, Predicate<String> pre){
List<String> list1 = new ArrayList<>();
for (String str:list) {
if (pre.test(str)){
list1.add(str);
}
}
return list1;
}
---------------------------------------------------------------------------------------------------------------------------
其他接口