首页 > 其他分享 >lambda表达式(jdk8才开始出现的语法)

lambda表达式(jdk8才开始出现的语法)

时间:2023-08-12 21:01:20浏览次数:40  
标签:Product return name price jdk8 new public 表达式 lambda

1、是为了简化某些场景下匿名对象的繁琐。其中有一种函数式编程(强调做什么,而不是强调谁去做)的思想。

语法格式:

(形参列表) ->(固定格式){

​ 方法体;

}

测试代码如下所示:

import java.util.Arrays;
import java.util.Comparator;

public class Test {
    public static void main(String[] args) {
        /**
         * lambda表达式
         *  简化匿名对象的代码
         * */

        Product p1 = new Product(249, "鼠标");
        Product p2 = new Product(249, "电脑");
        Product p3 = new Product(2349, "显示器");
        Product p4 = new Product(549, "键盘");

        Product[] products = new Product[]{p1, p2, p3, p4};


        //使用传统方法
        Arrays.sort(products, new Comparator<Product>() {
            @Override
            public int compare(Product o1, Product o2) {
                return Double.compare(o1.getPrice(),o2.getPrice());
            }
        });

        for (int i = 0; i < products.length; i++) {
            System.out.println(products[i].toString());
        }

        System.out.println("---------------------------------");

        //使用lambda表达式简化代码
        Arrays.sort(products,(Product o1, Product o2) -> {
            return -(Double.compare(o1.getPrice(),o2.getPrice()));
        });

        for (int i = 0; i < products.length; i++) {
            System.out.println(products[i].toString());
        }


    }
}


class Product implements Comparable{
    private double price;
    String name;


    public Product() {
    }

    public Product(double price, String name) {
        this.price = price;
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    public String toString() {
        return "Product{price = " + price + ", name = " + name + "}";
    }

    @Override
    public int compareTo(Object o) {
        if (o == this){
            return 0;
        }
        if(o instanceof Product){
            Product p = (Product)o;
            int value = 0;
            value = Double.compare(this.price,p.getPrice());
            if(value != 0){
                return value;           //如果值不等于零,表示两个价格不同,则返回比较的信号值
            }
            return this.name.compareTo(p.name);     //否则则进行名称的比较
        }else
            throw new RuntimeException("类型错误!");
    }
}
2、注意:lambda表达式只能简化函数式接口(有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@Functionallnterface注解)的匿名内部类的写法。
3、lambda表达式的省略规则

①、参数类型可以省略不写

②、如果只有一个参数,参数类型可以省略,同时()也可以省略

③、如果lambda表达式的方法只有一行,大括号,分号,return可以省略不写,但是需要同时省略,不能只省略某个。

标签:Product,return,name,price,jdk8,new,public,表达式,lambda
From: https://blog.51cto.com/u_15433911/7061774

相关文章

  • 正则表达式学习笔记
    .:任意一个字符\d:代表一个数字,等价于[0-9]\D:代表一个非数字,等价于[^\d]或者[^0-9]\s:代表一个空白字符,诸如Space,\n,\r,Tab\S:代表一个非空白字符\w:代表一个单词字符,诸如a,9,_,蛙\W:代表一个非单词字符*:量词,左侧字符串出现任意次(包括\(0\)次)?:量词,左侧字符出现\(\le1\)次+:......
  • 表达式计算通用规则
    表达式计算通用规则从左向右运算符俩俩比较,左边运算符优先级高于右边运算符时,先算左边的。左边运算符优先级低于右边的继续向右比较,直到找到一个相对最高的。(之后的的运算符低,或者到末尾了),进行运算。如果左右优先级相同看结合性,(单目运算右结合,双目运算左结合。三目运算嵌套......
  • Shell 条件表达式的使用
    介绍条件表达式可以是一元的,也可以是二元。一元表达式常用于检查文件状态、字符串运算、数字运算。使用检查文件状态参数-a文件存在,则为真(TRUE)。-b文件存在并且是块设备,则为真(TRUE)。-c文件存在并且是字符设备,则为真(TRUE)。-d文件存在并且是目录,则为真(TRUE)。-e文件......
  • 【面试题】 JavaScript中高级语法--?? 表达式 的作用
    前言在JavaScript中,双问号(??)表达式是一种非常有用的方法。它的作用是用来检测一个值是否为null或undefined。如果该值为null或undefined,那么双问号表达式会返回一个默认值。下面我们就来具体探究一下双问号表达式的用法,以及它与其他相似方法的区别。具体用法。其实,双问号表达式就是......
  • lambdaQuery分页搜索
    List<BaseTestPaper>baseTestPapers=this.lambdaQuery().like(pageTestPaperDto.getCourseType()!=null,BaseTestPaper::getCourseType,pageTestPaperDto.getCourseType())//courseType......
  • BootstrapBlazor组件库,组件方法的表达式传参
    BootstrapBlazor组件库,组件方法的表达式传参有时候我们在循环中创建组件的时候,可能想把item的值也一并传入组件的方法事件中去处理,有很多小伙伴就不知道如何去调用事件了。下面是一段实例代码,通过循环遍历来创建图片,并且创建一个删除图片的按钮,这个按钮的OnConfirm方法需要把图......
  • 正则表达式
    24小时制时间(HH:mm:ss)/^((?:[01]d|2[0-3]):[0-5]d:[0-5]d$)/12小时制时间(hh:mm:ss)/^(1[0-2]|0?[1-9]):[0-5]d:[0-5]d$/base64格式/^s*data:([a-z]+/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=-._~:@/?%s]*?)s*$/i数字/货币金额(支持负数、千......
  • Go语言正则表达式提取网页文本
    为了方便提取,我们会把正则表达式中要提取的数据使用命名方式来书写正则表达式。这个技术在Go语言中如何实现,可以看下面这篇博客:UsingtheGoRegexpPackagehttp://blog.kamilkisiel.net/blog/2012/07/05/using-the-go-regexp-package/简单期间,这里复制其中几个例子的代码:我们期望......
  • 【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    本文目录一、常用规则 二、实际使用建议三、Flag标志位四、If判断指令五、全局变量六、常用正则七、Rewrite规则八、Rewrite实例8.1实例一8.2实例二九、项目实例9.1项目一9.2项目实战作为一名Java开发人员,有些东西不经常使用,很容易忘记,好比nginx配置内容,以下内容是记录了公司......
  • python正则表达式笔记1
    最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。一、正则表达式语法介绍正则表达式(或RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或者正则表达式是否匹配到字符串,......