摘要
Lambda 允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。可以取代大部分的匿名內部類,寫出更優雅的 Java 代碼,尤其在集合的遍歷和其他集合操作中,可以極大地優化代碼結構。
基礎語法
(parameters) -> expression
(parameter1,parameter2) ->{ statements; }
1.無參無返回值
//無參無返回
/**無參無返回值*/
@FunctionalInterface
public interface NoReturnNoParamMethod {
void operate();
}
NoReturnNoParamMethod noReturnNoParamMethod = () -> {
System.out.println("無參無返回");
};
noReturnNoParamMethod.operate();
2.一個參數無返回值
/**一個參數無返回*/
@FunctionalInterface
public interface NoReturnOneParamMethod {
void operate(int a);
}
//一個參數無返回
NoReturnOneParamMethod noReturnOneParamMethod = a-> {
System.out.println("一個參數無返回 param:" + a);
};
noReturnOneParamMethod.operate(6);
3.多參數無返回值
/**多參數無返回*/
@FunctionalInterface
public interface NoReturnMultiParamMethod {
void operate(int a, int b);
}
//多個參數無返回
NoReturnMultiParamMethod noReturnMultiParamMethod = (a, b) -> {
System.out.println("多個參數無返回 param:" + "{" + a +"," + + b +"}");
};
noReturnMultiParamMethod.operate(6, 8);
4.無參有返回值
/*** 無參有返回*/
@FunctionalInterface
public interface ReturnNoParamMethod {
int operate();
}
//無參有返回值
ReturnNoParamMethod returnNoParamMethod = () -> {
System.out.print("無參有返回值");
return 1;
};
int res = returnNoParamMethod.operate();
System.out.println("return:" + res);
5.一個參數有返回值
/**一個參數有返回值*/
@FunctionalInterface
public interface ReturnOneParamMethod {
int operate(int a);
}
//一個參數有返回值
ReturnOneParamMethod returnOneParamMethod = a -> {
System.out.println("一個參數有返回值 param:" + a);
return 1;
};
int res2 = returnOneParamMethod.operate(6);
System.out.println("return:" + res2);
6.多個參數有返回值
/**多個參數有返回值*/
@FunctionalInterface
public interface ReturnMultiParamMethod {
int operate(int a, int b);
}
//多個參數有返回值
ReturnMultiParamMethod returnMultiParamMethod = (a, b) -> {
System.out.println("多個參數有返回值 param:" + "{" + a + "," + b +"}");
return 1;
};
int res3 = returnMultiParamMethod.operate(6, 8);
System.out.println("return:" + res3);
引用方法
方法歸屬者::方法名 靜態方法的歸屬者爲類名,普通方法歸屬者爲對象
public static void main(String args[]){
List<String> names = new ArrayList();
names.add("小楊");
names.add("小張");
names.add("小紅");
names.add("小王");
names.forEach(System.out::println);
}
輸出
小楊
小張
小紅
小王