package com.hq;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class Jdk8NewFeatureTest {
public static void main(String[] args) {
//场景1:不带参数匿名内部类
//原本写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Lambda!");
}
});
//Testr1:写法较完整的格式(也可以拆成下面两步写)
new Thread(() -> {
System.out.println("Lambda!");
});
//匿名内部类
Runnable t1= () -> {
System.out.println("Lambda!");
};
new Thread(t1);
//Testr2:如果方法体只有一句话,可以省略{}
Runnable t2= () -> System.out.println("Lambda!");
new Thread(t2);
//或:
new Thread(() -> System.out.println("Lambda!"));
//场景2:带参数匿名内部类
//原本写法:
Person p1 = new Person() {
@Override
public void count(Integer val) {
val++;
}
};
//Testp01:写法较完整的格式
Person p01= (var) -> {
var++;
};
//Testp02:如果方法体只有一句话,可以省略{}
Person p02= (var) -> var++;
//Testp03:如果有且只有一个参数,则()可以省略
Person p03= var -> var++;
//Testp04:如果方法体里只有某个方法且这个方法的入参是重写方法的入参,则可以用【调用方法的对象类型::方法名】写法
Person p04=System.out::println;
//类似于:
Person pp04 = new Person() {
@Override
public void count(Integer val) {
System.out.println(val);
}
};
//Testp05:如果方法体里只有调用这个参数的某个方法,则可以用【调用方法的对象类型::方法名】写法
Person p05=Integer::intValue;
//类似于:
Person pp05 = new Person() {
@Override
public void count(Integer val) {
val.intValue();
}
};
//场景3:forEach遍历方法
List list = new ArrayList();
list.add("hello");
list.forEach(b -> System.out.println(b));
//或者:
list.forEach(System.out::println);
//类似于原本写法:forEach方法里面参数类型是一个Consumer接口
list.forEach(new Consumer(){
public void accept(String b){
System.out.println(b);
}
});
//场景4:返回new一个对象
//Testp06:如果方法体里只有调用这个参数的某个方法,则可以用【调用方法的对象类型::方法名】写法
Person p06=PersonEn::new;
//类似于原本写法:
}
}
interface Person {
public void count(Integer val);
}
interface Person2 {
PersonEn getPerson(int age);
}
class PersonEn{
int age;
public PersonEn(int age){
this.age=age;
}
public int getAge(){
return age;
}
}