首页 > 其他分享 >八,Lambda表达式

八,Lambda表达式

时间:2024-10-18 21:12:39浏览次数:7  
标签:info name 枚举 Lambda public 表达式 String

Java Lambda表达式与枚举

Lambda表达式概述

Java从JDK 1.8开始引入了Lambda表达式,以简化代码开发并支持函数式编程。Lambda表达式可以避免面向对象编程中的一些繁琐问题,但同时也是一把双刃剑。

Lambda表达式的使用场景

  • 必须有相应的函数接口,即内部有且仅有一个抽象方法的接口。
  • 类型推断机制,编译器可以根据上下文信息推断出参数列表的类型。

Lambda表达式的优点

  • 匿名函数,可以写出更简洁、更灵活的代码。
  • 提升了Java的语言表达能力。

Lambda表达式的演化

通过员工过滤年龄和工资的案例,感受Lambda表达式的演化与方便之处。

Lambda表达式的语法

Lambda表达式引入了->操作符,分为两个部分:左侧的参数列表和右侧的Lambda体。

分类与格式

  1. 无参数,无返回值
    () -> {
        执行语句
    }
    
  2. 有一个参数,无返回值
    (变量名) -> {
        执行语句
    }
    
  3. 只有一个参数时,小括号可省略
    变量名 -> {
        执行语句
    }
    
  4. 两个以上参数,有返回值,Lambda体中有多条语句
    (变量名1, 变量名2) -> {
        执行语句;
        return xxx;
    }
    
  5. Lambda体中只有一条语句时,可省略return和大括号
    (变量名1, 变量名2) -> 要返回的结果;
    
  6. 类型推断
    ([类型] 变量名1, [类型] 变量名2) -> 要返回的结果;
    

总结口诀

上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省

Java内置函数式接口

Java在java.util.function包下提供了多个内置函数式接口,如Predicate<T>Function<T,R>Supplier<T>Consumer<T>

Predicate 断言型接口

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Function<T,R> 函数型接口

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

Supplier 供给型接口

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

Consumer 消费型接口

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

Lambda用法再简洁之方法引用

对象引用

对象引用::实例方法名

类引用

类名::静态方法名

类::实例方法名

变量1对应的类名::实例方法名

构造方法引用

类名::new

数组引用

元素类型[]::new

误区

Lambda表达式并不是匿名内部类的实现,而是通过invokedynamic指令调用。

小结

Lambda表达式的优点是可以减少代码量,节省内存占用,但易读性较差,不方便调试。

新特性2:枚举

枚举概述

枚举类型用于统一管理有限的常量数据,提高代码的可读性和简洁性。

JDK1.5之前使用枚举

  1. 创建枚举类的属性必须是私有常量。
  2. 构造方法必须私有化。
  3. 提供公共的静态final方法获取枚举对象。
  4. 提供公共的获取属性的方法。
  5. 重写toString()方法。

JDK1.5之后使用枚举

  1. 枚举对象放在开头。
  2. 创建枚举类的属性必须是私有常量。
  3. 构造方法必须私有化。
  4. 提供公共的获取属性的方法。
  5. 重写toString()方法。

枚举类实现接口

枚举类可以实现接口,并且枚举中的每个对象可以单独实现接口。

/*
    1. 创建枚举类的属性(成员遍历),必须是作为私有常量出现
    2. 必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    3. 提供公共的静态的final方法给外界获取枚举类中多个对象
    4. 提供公共的获取属性的方法
    5. 重写toString()方法

 */
class Season{
    //1. 创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private String name;
    private String info;

    //2. 必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season(String name, String info){
        this.name = name;
        this.info = info;
    }

    //3. 提供公共的静态的final方法给外界获取枚举类中多个对象
    public static final Season SPRING = new Season("春天","春暖花开");
    public static final Season SUMMER = new Season("夏天","烈日炎炎");
    public static final Season AUTUMN = new Season("秋天","秋高气爽");
    public static final Season WINTER = new Season("冬天","白雪皑皑");

    //4. 提供公共的获取属性的方法


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
}

public class SeasonDemo1 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        Season summer = Season.SUMMER;

    }
}
/*
    jdk1.5之后 java提供了一个关键字用于创建枚举类 enum
 */
enum Season2{
    //jdk1.5之后必须将有限个对象放在enum枚举类第一个开头位置,多个对象之间使用逗号隔开
    SPRING("春天","春暖花开"),
    SUMMER("夏天","烈日炎炎"),
    AUTUMN("秋天","秋高气爽"),
    WINTER("冬天","白雪皑皑");

    //1. 创建枚举类的属性(成员遍历),必须是作为私有常量出现
    private String name;
    private String info;

    //2. 必须将构造方法私有化,这是为了保证类的对象是有限个的目的
    private Season2(String name, String info){
        this.name = name;
        this.info = info;
    }

    //4. 提供公共的获取属性的方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
}

public class SeasonDemo2 {
    public static void main(String[] args) {
        Season2 spring = Season2.SPRING;
        System.out.println(spring.getName());
        System.out.println(spring.getInfo());
    }
}

标签:info,name,枚举,Lambda,public,表达式,String
From: https://www.cnblogs.com/bjynjj/p/18475044

相关文章

  • 模板信息渲染和正则表达式的运用
    业务后台配置模板消息配置变量名及相关数据,用来进行查询配置模板信息,嵌入变量名前台渲染通过接口获取模板信息将模板消息中的变量替换成对应的数据模板信息:'今天到场一共${aaa}人,其中男${bbb}人,女${ccc}人'相关信息:{describe:'今天到场一共${aaa}人,其中男${bbb......
  • 专题(十九)Linux 下的正则表达式
    一、作用与介绍正则表达式通常用于判断语句中,用来检查某一字符串是否满足某一格式正则表达式是由普通字符与元字符组成普通字符:包括大小写字母、数字、标点符号及一些其它符号元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)......
  • 讲解LeetCode第150题:逆波兰表达式求值(完整代码)
    LeetCode第150题:逆波兰表达式求值题目介绍方法一:栈完整代码展示核心原理演示代码片段解释片段一:片段二:片段三:片段四:片段五:方法二:数组模拟栈完整代码展示核心原理演示代码片段解释片段一:片段二:片段三:......
  • 正则表达式
    正则表达式正则表达式是一种匹配输入文本的模式。.Net框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。作用:查询,从字符串中获取我们想要的部分匹配,判定字符串是否符合规则如判断用户输入的密码是否正确,邮箱格式是否合法等。字符转义......
  • Java之Lambda表达式详解
    一、Lambda表达式的概念与特点Lambda表达式是Java8引入的一个重要特性,它提供了一种简洁、优雅的方式来处理集合、过滤、映射等操作。Lambda表达式可以看做是匿名函数,它允许开发者以更简洁的方式声明匿名函数。Lambda表达式的基本语法由箭头指示符“->”表示,它将参数与函数......
  • 运算符于表达式
    算数运算符+加法、-减法、*乘法、/除法、%取余。++自增,变量自身增加1。++在前,先算后用;++在后,先用后算。--自减,变量自身减少1。--在前,先算后用;--在后,先用后算。赋值运算符=赋值复合运算符:+=加等、-=减等、*=乘等、/=除等、%=取余等。关系运算符>大于,>=大于等于,==等于,!=不等......
  • Java 8 的 Lambda、函数式接口、Stream 用法和原理
    我是风筝,公众号「古时的风筝」。一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在JavaNewBee中,更有Java后端知识图谱,从小白到大牛要走的路都在里面。公众号回复『666』获取高清大图。就在今年Java25周岁了,可能比在座的各位中的一些......
  • C语言运算符和表达式
    1.C语言赋值运算符实例讲解C使用运算符(operator)来代表算术运算。例如,+运算符可以使它两侧的值加在一起。如果您觉得术语“运算符”听起来比较奇怪,那么请您记住那些东西总得有个名称。与其被称之为“那些东西”或“数学符号”,被称之为“运算符”似乎看起来更专业一些!现在,除......
  • 算法-中缀转后缀表达式(C++)
    因为操作数在后缀表达式中它们的顺序与中缀表达式一致,所以操作数不需要进行特殊处理,所以遇到数字就输出,遇到符号就经过处理再输出所以需要用一个存储结构存符号为什么用栈存储:要利用后进先出的特性出栈也就是加入到后缀表达式中,一部分一部分处理,处理完一部分,要处理他邻近的......
  • Lambda Expression
    一、什么是LambdaExpression?作用是什么?LambdaExpression是匿名函数的一种表达方式,就是没有函数名的函数。用途:函数作为参数传递时,可以直接传LambdaExpression,而不用先定义一个函数,再传函数名。二、语法[捕获列表](参数列表)->返回类型{函数体}如:[](conststrin......