package JUC;
import java.util.Arrays;
import java.util.List;
import javax.security.auth.x500.X500Principal;
@FunctionalInterface
//接口也是一种特殊的类,如果该接口用于lamda表达式进行函数式编程,
//则只能有一个方法,@FunctionalInterface可标可不标,如果有两个函数,则会出错!!!
interface MyFo{//函数式接口
//public void print();
public int add(int x,int y);
//java8中接口可以有默认的方法实现,可以有n多个!!!!!!!打破接口只能定义不能实现的规则!!!!!
default int dev1(int x,int y) {
return x*y;
}
default int dev2(int x1,int y1) {
return x1*y1;
}
// private int dev3(int x1,int y1) {//java不可以,java9可以用private实现了
// return x1*y1;
// }
//java8中接口可以有静态的方法实现,可以有n多个!!!!!!!打破接口只能定义不能实现的规则!!!!!
//这时要用类名调用!!!!!!!!!!!
public static void name() {
System.out.println("wo is yexin");
}
public static void name2(String a) {
System.out.println("wo is :"+a);
}
}
/**
* 1.函数式编程
* 简而言之:Lamda表达式就是匿名类不类的简写方式
* lamda表达式格式:(形参列表) -> {方法体实现}!!!!!!!
* @author YEXIN
*
*/
public class LamdaDemo {
public static void main(String[] args) {
// //接口方式
// MyFo myFo = new MyFo() {//接口也是一种特殊的类,在new的时候要实现它的匿名类部类方法。
//
// @Override
// public void print() {//匿名类部类必须实现接口的方法
//
// System.out.println("*****hello yeixn");
// }
//
// public void name() {
// System.out.println("helo");
// }
// };
//
// myFo.print();
//-----------------------------------------------------------------------------
//lamda表达式
MyFo myFo = (int x,int y) -> {return x+y;};//lamda表达式格式:(形参列表) -> {方法体实现}
int res = myFo.add(4, 6);
System.out.println(res);
System.out.println(myFo.dev1(10, 5));//调用默认的方法实现,不使用{return x+y;}方法体了!!!!!!
MyFo.name2("jkhkj");
MyFo.name();
//-----------------------------------------------------------------------------
List<Integer> list = Arrays.asList(1,2,3,4,5,6,8);
// for (Integer emlment : list) {
// System.out.println(emlment);
// }
//java8的增强for循环加强了
list.forEach(System.out::println);
}
}
==========================================================
10
50
wo is :jkhkj
wo is yexin
1
2
3
4
5
6
8