lambda

package com.lkw.lambda;

import java.util.Comparator;

public class lambdabasic {
//Lambda 必须是接口函数才行--jdk1.8
//所谓的java8四大核心函数接口就是我们下面写的多种
//Consumer<T> void method(T t); 消费接口
//Supplier<T> T method(); 供给接口
//Function<T,R> R method(T t); 函数接口
//Predicate<T> boolean method(T t) 断言接口
//正因为接口函数,我们都以匿名来写,所以匿名的变量必须被使用

public static void main(String[] args) {

/*//语法格式一:无参数,无返回值
//()->syso("a");
Runnable r1= new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("hello lkw");
}
};
r1.run();
//Lambda表达式
Runnable r2 = ()->System.out.println("hello lkw");*/


/*//语法格式二:有一个参数,无返回值(只有一个参数可以省略括号)
//(x)->syso(x) ------ x->syso(x)
//Consumer<T> 消费型接口
Consumer<String> con =new Consumer<String>(){
@Override
public void accept(String x) {
System.out.println(x);
}
};
//Lambda 表达式
Consumer<String> con1 = (x1) -> System.out.println(x1);
con1.accept("Hello Lambda!!");
//Lambda 一个参数可以省略括号
Consumer<String> con2 = x2 -> System.out.println(x2);
con2.accept("hello lambda");*/


/*//Exception in thread "main" java.lang.StackOverflowError
//原因执行main,实力化Comparator类,c调用方法这里是递归所以栈溢出
//语法格式三:有两个以上的参数,有返回值,Lambda体里有多条语句需要{}
Comparator<Integer> c = new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
System.out.println("匿名内部类输出");
return compare(o1, o2);
}
};
System.out.println(c.compare(23, 55));
//Lambda
//为啥要加Integer,因为Integer是静态方法,如果这里不加Integer,怎在外面要有static compare方法
Comparator<Integer> c1 = (o1,o2) -> {System.out.println("Lambda输出多语句要加{}");
return Integer.compare(o1,o2);
};*/




/*
//语法格式四:若Lambda体中只有一条语句,return和{}都可以省略
Comparator<Integer> c1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return Integer.compare(o1, o2);
}
};
System.out.println(c1.compare(29, 30));
//Lambda
Comparator<Integer> c2 = (o1,o2) -> Integer.compare(o1, o2);
System.out.println(c2.compare(30, 29));*/




/*
//语法格式五:Lambda表达式参数可以不写,因为JVM编译时会通过上下文推断出数据类型
//要写也可以,要门都写要么都不写
Comparator<Integer> c =new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return Integer.compare(o1, o2);
}
};
System.out.println(c.compare(30, 30));
//Lambda写出数据类型
Comparator<Integer> c1 = (Integer x,Integer y) -> Integer.compare(x, y);
System.out.println(c1.compare(20, 20));
//Lambda不写出数据类型自行推测
Comparator<Integer> c2 = (x,y) -> Integer.compare(x, y);
System.out.println(c2.compare(30, 1));
*/

}
}

原文地址:https://www.cnblogs.com/lkwcrystal/p/12367193.html