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

lambda表达式 [Java]

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

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);
        }
    }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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