栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java

Lambda表达式

Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。

格式:

(参数列表)->{代码}  

小括号 和 大括号 都还可以省略

语法糖:

简单的说,语法糖就是一种便捷写法。就相当于汉语里的成语。

idea tip:

ctrl+p 查看传参提示

public class LambdaDemo_01 {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
     System.out.println("_____新线程中run方法____");
            }
        }).start();
    }

}

上面这个Thread构造需要一个实现了Runnable接口的对象

我们使用了匿名内部类,并且重写了run方法,然后调用了start()。

什么情况可以使用Lambda表达式:

  • 上面这种 这个匿名内部类 是一个接口的匿名内部类,并且只需要实现(重写)一个抽象方法(可能接口中其他的是默认方法,就一个是抽象的 )

    Lambda表达式 不关注类名,方法名,关注的是方法的参数和方法体

    public static void main(String[] args) {
        new Thread(  () -> {System.out.println("_____新线程中run方法____")
        ;}).start();
    }
    

    (参数列表)->{代码} 完成!

下面是几个循序渐进的案例:

public static void main(String[] args) {
    int num = calculateNum(new IntBinaryOperator() {
        @Override
        public int applyAsInt(int left, int right) {
            return left + right;
        }
    });
    System.out.println(num);
}

public static int calculateNum(IntBinaryOperator operator) {
    int a = 10;
    int b = 20;
    return operator.applyAsInt(a, b);
}
public static void main(String[] args) {
    int num = calculateNum((a,b)->{return a+b ;});
    System.out.println(num);
}


public static int calculateNum(IntBinaryOperator operator) {
    int a = 10;
    int b = 20;
    return operator.applyAsInt(a, b);
}
public static void main(String[] args) {
        int num = calculateNum((a,b)-> a+b);
        System.out.println(num);
    }

tip: 使用idea alt+回车 可以转换匿名内部类到lambda表达式,也可以lambda表达式转换到匿名内部类。

灰常方便

public class LambdaDemo_03 {
    public static void main(String[] args) {
        printNum(new IntPredicate() {
            @Override
            public boolean test(int value) {
                return value%2 == 0;
            }
        });
    }
    
    public static void main(String[] args) {
        printNum((a)->  a%2 == 0);
    }
    
    public static void printNum(IntPredicate predicate){
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        for (int i : arr) {
            if(predicate.test(i)){
                System.out.println(i);
            }
        }
    }

}
public class LambdaDemo_04 {
    public static void main(String[] args) {
        Integer integer = typeConver(new Function() {
            @Override
            public Integer apply(String s) {
                return Integer.valueOf(s);
            }
        });

        System.out.println(integer);
    }
    
    public static void main(String[] args) {
        //泛型都省略了
        Integer integer = typeConver(s -> Integer.valueOf(s));

        System.out.println(integer);
    }
    
    public static  R typeConver(Function function){
        String str = "1235";
        R result = function.apply(str);
        return result;
    }

}
public class LambdaDemo_04 {
    public static void main(String[] args) {
        String st = typeConver(new Function() {
            @Override
            public String apply(String s) {
                return s+"aaa";
            }
        });

        System.out.println(st);
    }
    
    public static  R typeConver(Function function){
        String str = "1235";
        R result = function.apply(str);
        return result;
    }

}

   public static void main(String[] args) {
       //泛型都可以省略了 
       String st = typeConver(s -> s+"aaa");
        System.out.println(st);
   }

心中目标 就是写一个 实现了哪个方法的,匿名内部类

省略规则
(参数列表)->{代码} 
  • 小括号里的 参数类型可省略
  • 方法体里只有一句代码时 大括号,return和 最后的分号可省略
  • 方法只有 一个参数的时候 小括号可省略

热爱当下 享受当下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号