/*
* lambda表达式,把代码变得更加简单,但是可读性比较差
* 1.简化匿名内部类的编写
* 2.直接实现接口中的函数
* 3.函数名(参数列表)
* 4.函数实现用"->"表示实现{}表示实现的具体逻辑
* 5.用接口声明使用。
* 6.用声明的变量调用实现的方法。
*/
interface Inter{
int c();
}
interface Inter1{
int c(int x);
}
interface A{
int c(int a,int b);
}
interface B{
void b(String str);
}
public class Demo1 {
public static void main(String[] args) {
//匿名的内部类
new Inter(){
@Override
public int c(){
return 6;
}
}.c();
//lambda表达式
//1.没有参数,直接返回 () ->6; 参数列表-->语句块
Inter d1= ()->6;
d1.c();
System.out.println(d1.c());//6
//2.有参数的匿名内部类
new Inter1() {
@Override
public int c(int x) {
return x*2;
}
}.c(100);
//接收一个参数(参数x)->x*2;结果用接口的类型接收
Inter1 d2=(y)->{return y * 2 ;};
d2.c(100);
System.out.println(d2.c(100));//200
//3.lambda表达式,实现接口A。(x,y)->{return x-y};
A d3 = (x,y)->{return x-y;};
d3.c(23, 20);//没有声明类型
//4.接收声明类型的参数
A d4 =(int a,int b)->{return a-b; };
A d4_1 =(int a,int b)-> a-b;
d4.c(1, 2);
d4_1.c(100, 20);
A d4_2=(a,b)->a*b;
A d4_3=(a,b)->a/b;
A d4_4=(a,b)->a+b;
//5.接收一个字符串对象。
new B(){
@Override
public void b(String str) {
System.out.println(str);
}
}.b("hello");;
//()->;===()->o
B b5=(String str)->{System.out.println(str);};
B b5_1=(s)->System.out.println(s);
b5_1.b("hello");
//6.传递接口,实现不同业务的访问。
int s=test(1, 2, d4_4);//+
System.out.println(s);
System.out.println(test(1, 2, d4_1));//-
System.out.println(test(1, 2, d4_2));//*
}
//函数传递的形式。parm1=数值1,parm2=数值2,parm3=运算方法
private static int test(int x,int y,A a){
return a.c(x, y);
}
}
运行截图
循环 foreach
import java.util.*;
/*
* 方法的引用::使代码更加紧凑简洁
*/
public class Demo2 {
public static void main(String[] args) {
//第一种方式,创建一个数组,然后把数组转换成一个list
String[] strs=new String[]{"b","a","c"};
Arrays.asList(strs);
//第二种方式,直接创建一个list容器,然后向里面存值
List<String> list= new ArrayList<String>();
list.add("b");
list.add("a");
list.add("c");
list.forEach((String s)->System.out.println(s));
//e表示 new .. 匿名类的写法
list.forEach(e->System.out.print(e+" "));
System.out.println("");
//方法引用的方式
list.forEach(System.out::print);
}
}
运行截图