1眠冈、Lambda表達(dá)式簡(jiǎn)單說(shuō)就是一個(gè)方法
2已慢、它可以作為參數(shù)在方法見傳遞
3入挣、但只能在使用了FunctionalInterface的地方
4移宅、FunctionalInterface是單個(gè)方法的接口虎忌,且使用了@FunctionalInterface的注解
5泡徙、Lambda的好處是語(yǔ)法簡(jiǎn)潔,同時(shí)在多核CPU下運(yùn)行效率高
6膜蠢、Lambda表達(dá)式的語(yǔ)法
基本語(yǔ)法:
(parameters) -> expression或
(parameters) ->{ statements; }
實(shí)例:
一:runnable接口符合Lambda的要求(3和4點(diǎn)就是使用Lambda表達(dá)式的基本要求)
Runnable.class
public class LearnLambda1 {
public static void main(String [] args){
for(int i = 0; i<1000; i++)
new Thread(()->
System.out.println("I am thread "+Thread.currentThread().getId())).start();
}
}
二堪藐、List.forEach(Consumer c)中的Consumer接口也是只有一個(gè)方法莉兰,并且使用了@FunctionalInterface的注解
public class LearnLambda2 {
public static void main(String [] args){
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("張三","化學(xué)",60));
persons.add(new Person("李四","生物",78));
persons.add(new Person("王五","物理",69));
persons.add(new Person("錢六","計(jì)算機(jī)",83));
persons.add(new Person("趙七","英語(yǔ)",90));
persons.forEach((Person p)->System.out.println(p.name));
System.out.println();
persons.forEach((Person p)->System.out.println(p.name + ":" + p.department));
System.out.println();
persons.forEach((Person p)->System.out.println(p.name + ":" + p.score));
}
}
public class Person {
public String name;
public String department;
public int score;
public Person(String name, String department, int score) {
this.name = name;
this.department = department;
this.score = score;
}
}
三、Predicate接口也是也是只有一個(gè)方法礁竞,并且使用了@FunctionalInterface的注解(接口詳細(xì)信息請(qǐng)看API)
public class LearnLambda3 {
public static void main(String [] args){
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("張三","化學(xué)",60));
persons.add(new Person("李四","生物",78));
persons.add(new Person("王五","物理",69));
persons.add(new Person("錢六","計(jì)算機(jī)",83));
persons.add(new Person("趙七","化學(xué)",90));
// filterPrint(persons,(Person p)->p.department.equals("化學(xué)"));
filterPrint(persons,(Person p)->p.score>70);
}
public static void filterPrint(List<Person> persons,Predicate<Person> predicate){
for(Person p : persons){
if(predicate.test(p))
System.out.println(p.name);
}
}
}
四糖荒、當(dāng)然我們可以自定義接口來(lái)使用lambda
@FunctionalInterface
interface Studey{
void studing();
}
public class LearnLambda4 {
public static void doSomething(Studey study){//可以有多個(gè)參數(shù),方法內(nèi)容也可以自定義
study.studing();
}
public static void main(String [] args){
doSomething(()->System.out.println("我正在學(xué)習(xí)lambda"));
}
}