步驟 5 : 從匿名類演變成Lambda表達式頂折
Lambda表達式可以看成是匿名類一點點演變過來
1. 匿名類的正常寫法
HeroChecker c1 = new HeroChecker() {
public boolean test(Hero h) {
return (h.hp>100 && h.damage<50);
}
};
2. 把外面的殼子去掉
隻保留方法參數和方法體
參數和方法體之間加上符号 ->
HeroChecker c2 = (Hero h) ->{
return h.hp>100 && h.damage<50;
};
3. 把return和{}去掉
HeroChecker c3 = (Hero h) ->h.hp>100 && h.damage<50;
4. 把 參數類型和圓括号去掉(隻有一個參數的時候,才可以去掉圓括号)
HeroChecker c4 = h ->h.hp>100 && h.damage<50;
5. 把c4作為參數傳遞進去
filter(heros,c4);
6. 直接把表達式傳遞進去
filter(heros, h -> h.hp > 100 && h.damage < 50);
package lambda;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import charactor.Hero;
public class TestLamdba {
public static void main(String[] args) {
Random r = new Random();
List<Hero> heros = new ArrayList<Hero>();
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero " + i, r.nextInt(1000), r.nextInt(100)));
}
System.out.println("初始化後的集合:");
System.out.println(heros);
System.out.println("使用匿名類的方式,篩選出 hp>100 && damange<50的英雄");
// 匿名類的正常寫法
HeroChecker c1 = new HeroChecker() {
@Override
public boolean test(Hero h) {
return (h.hp > 100 && h.damage < 50);
}
};
// 把new HeroChcekcer,方法名,方法傳回類型資訊去掉
// 隻保留方法參數和方法體
// 參數和方法體之間加上符号 ->
HeroChecker c2 = (Hero h) -> {
return h.hp > 100 && h.damage < 50;
};
// 把return和{}去掉
HeroChecker c3 = (Hero h) -> h.hp > 100 && h.damage < 50;
// 把 參數類型和圓括号去掉
HeroChecker c4 = h -> h.hp > 100 && h.damage < 50;
// 把c4作為參數傳遞進去
filter(heros, c4);
// 直接把表達式傳遞進去
filter(heros, h -> h.hp > 100 && h.damage < 50);
}
private static void filter(List<Hero> heros, HeroChecker checker) {
for (Hero hero : heros) {
if (checker.test(hero))
System.out.print(hero);
}
}
}
步驟 5 :
從匿名類演變成Lambda表達式
Lambda表達式可以看成是匿名類一點點演變過來
1. 匿名類的正常寫法
HeroChecker c1 = new HeroChecker() {
public boolean test(Hero h) {
return (h.hp>100 && h.damage<50);
}
};
2. 把外面的殼子去掉
隻保留方法參數和方法體
參數和方法體之間加上符号 ->
HeroChecker c2 = (Hero h) ->{
return h.hp>100 && h.damage<50;
3. 把return和{}去掉
HeroChecker c3 = (Hero h) ->h.hp>100 && h.damage<50;
4. 把 參數類型和圓括号去掉(隻有一個參數的時候,才可以去掉圓括号)
HeroChecker c4 = h ->h.hp>100 && h.damage<50;
5. 把c4作為參數傳遞進去
filter(heros,c4);
6. 直接把表達式傳遞進去
filter(heros, h -> h.hp > 100 && h.damage < 50);