lambda表达式 [Java]

lambda表达式 [Java],第1张

lambda表达式 [Java] lambda表达式的使用: lambda表达式是java8中提出的一个新特性 lambda表达式的格式:
  1. -> lambda *** 作符,或者我们也称之为箭头 *** 作符
  2. -> 的左边 : lambda形参列表 ---- 其实也就是函数式接口中的抽象方法的方法体
  3. -> 的右边 : lambda体 — 就是我们要重写的抽象方法的方法体 — 就是具体我们要如何实现
lambda表达式的使用(这里我们分为六种情况来介绍)
  1. 语法格式一: 无参,无返回值 eg:创建Runnable接口的实现类对象时
    package Lambda表达式;
    
    public class Demo2 {
        public static void main(String[] args) {
            Runnable runnable = () -> {
                System.out.println("我爱北京天安门");
            };
            runnable.run();
        }
    }
    
  2. 语法格式二: 有参,无返回值 eg:创建Consumer接口实现类的对象时 这里我们是使用的匿名内部类的方式
    package Lambda表达式;
    
    import java.util.function.Consumer;
    
    public class Demo5 {
        public static void main(String[] args) {
            //这里我们就是使用匿名内部类的方式创建了一个consumer接口的实现类的对象
            Consumer consumer = new Consumer<>(){
                public void accept(String s){
                    System.out.println(s);
                }
            };
            consumer.accept("谎言和誓言最大的区别是什么?");
        }
    }
    
    
    这里我们使用lambda表达式的方式
    package Lambda表达式;
    
    import java.util.function.Consumer;
    
    public class Demo6 {
        public static void main(String[] args) {
            Consumer consumer = (String s) -> {
                System.out.println(s);
            };
            consumer.accept("一个是听的人当真了,一个是说的人当真了!");
        }
    }
    
    
  3. 语法格式三: 数据类型可以省略,因为数据类型可以由编译器推断得出 — 我们也称之为"类型推断" eg:创建Consumer接口的实现类的对象 这里我们直接使用lambda表达式的方式
    package Lambda表达式;
    
    import java.util.function.Consumer;
    
    public class Demo7 {
        public static void main(String[] args) {
            
            Consumer consumer = (s) -> {
                System.out.println(s);
            };
        }
    }
    
  • 我们之前也碰到过很多类型推断的情况
    1. 我们在创建泛型类对象的时候可以左加右不加

      eg:

      ArrayList list = new ArrayList<>();
      
      • 这个时候我们按理来说两边都要加上泛型,但是这个时候我们左边加上右边没有加,这个时候就是一种类型推断,由左边声明的ArrayList<泛型> 来确定实际的new ArrayList<泛型>;
    2. 简化创建一维数组的时候

      eg:

      int arr = {1,2,3};
      
      • 这个时候也是一种类型推断 ,按理说应该是: int arr = new int[]{1,2,3};
      • 这个时候也是由我们声明的arr的类型int来确定了后面new数组类型也是int ,这个是由编译器自动进行的类型推断
  1. 语法格式四: 当我们的接口中的抽象方法只有一个参数时,这个时候参数的小括号可以省略 eg:创建Consumer接口实现类对象 这里我们直接使用lambda表达式的方式:
    package Lambda表达式;
    
    import java.util.function.Consumer;
    
    public class Demo8 {
        public static void main(String[] args) {
            //这里由于我们的accept()方法只有一个参数,这个时候我们就可以省略掉这个参数的(),也就是省略小括号
            Consumer consumer = s -> {
                System.out.println(s);
            };
            consumer.accept("一个是听的人当真了,一个是说的人当真了");
        }
    }
    
  2. 语法格式五:需要两个或者两个以上的参数, 多条执行语句,并且有返回值 eg:创建Comparator接口的实现类的对象 这里我们先使用匿名内部类的方式来创建Comparator接口的实例化对象
    package Lambda表达式;
    
    import java.util.Comparator;
    
    public class Demo9 {
        public static void main(String[] args) {
            Comparator comparator = new Comparator<>(){
                public int compare(Integer i1 , Integer i2){
                    System.out.println(i1);
                    System.out.println(i2);
                    //这里我们调用了Integer类中的compare()静态方法
                    return Integer.compare(i1,i2);
                }
            };
            comparator.compare(1,2);
        }
    }
    
    
    接下里我们使用lambda表达式的方式来创建Comparator接口的实现类的对象
    package Lambda表达式;
    
    import java.util.Comparator;
    
    public class Demo10 {
        public static void main(String[] args) {
            
            Comparator comparator = (i1,i2) -> {
                System.out.println(i1);
                System.out.println(i2);
                return Integer.compare(i1,i2);
            };
            comparator.compare(1,2);
        }
    }
    
    
  3. 语法格式六: 当lambda体中只要一条java语句时,这个时候return和一对大括号{}都可以省略
    • 但是要注意: 这个时候如果我们要省略{},就要和return一起省略,如果要省内return就要和{}一起省略,反正就是要省略就要两个一起省略,如果要不省略就两个都不省略
    eg:创建Comparator接口的实例话对象 这个时候我们直接通过lambda表达式,并且直接省略{}和return
    package Lambda表达式;
    
    import java.util.Comparator;
    
    public class Demo11 {
        public static void main(String[] args) {
            //这个时候我们直接省略了lambda体的return和{}
            Comparator comparator = (i1,i2) -> Integer.compare(i1,i2);
            comparator.compare(1,2);
        }
    }
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存