• Java Lambda 表达式


    Lambda系列教材 (一)- Java Lambda 表达式教程
    https://how2j.cn/k/lambda/lambda-lamdba-tutorials/697.html

     步骤 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);
     
  • 相关阅读:
    kafka----简单的脚本命令重点
    kafka简单学习----遇到的问题
    nc简单使用
    kafka-sparkstreaming---学习1
    sparkStream---1
    装系统
    spark入门备忘---1
    linux---学习3
    MySql-5.7.17-20解压缩版安装配置
    springboot动态定时任务
  • 原文地址:https://www.cnblogs.com/rogge7/p/12659132.html
Copyright © 2020-2023  润新知